用R中的其他值替换数据框中的值

时间:2015-07-08 14:44:34

标签: r replace dataframe

我有两个数据框tab_Atab_b,其中包含类似的列名:groupV1:V3。第一个有额外的col idtab_A中的每一行都包含V1:V3内的值。

tab_A <- data.frame(cbind(id = rep(c("01", "02", "03"),3),
                       gr = c("A","A","A","B","B","B","C","C","C"),
                       V1 = c(NA,NA,"A","B",NA,NA,NA,"C","C"),
                       V2 = c("A",NA,NA,NA,"B","B","C",NA,NA),
                       V3 = c(NA,"A",NA,"B",NA,"B",NA,"C",NA)))
tab_b <- data.frame(cbind(gr = c("A","B","C"), V1 = c(5,2,9), V2 = c(0,1,5), 
                       V3 = c(4,4,3)))

我希望用来自<NA>的控制列tab_b的值替换V1:V3值。 期望的输出如下:

output
id gr   V1   V2   V3
01  A <NA>    0 <NA>
02  A <NA> <NA>    4
03  A    5 <NA> <NA>
01  B    2 <NA>    4
02  B <NA>    1 <NA>
03  B <NA>    1    4
01  C <NA>    5 <NA>
02  C    9 <NA>    3
03  C    9 <NA> <NA>

提前感谢您的关注。

1 个答案:

答案 0 :(得分:2)

以下是使用子集创建新数据框的解决方案:

tab_A <- data.frame(cbind(id = rep(c("01", "02", "03"),3),
                       gr = c("A","A","A","B","B","B","C","C","C"),
                       V1 = c(NA,NA,"A","B",NA,NA,NA,"C","C"),
                       V2 = c("A",NA,NA,NA,"B","B","C",NA,NA),
                       V3 = c(NA,"A",NA,"B",NA,"B",NA,"C",NA)))
tab_b <- data.frame(cbind(gr = c("A","B","C"), V1 = c(5,2,9), V2 = c(0,1,5), 
                       V3 = c(4,4,3)))

df <- data.frame(id = tab_A$id,
                 gr = tab_A$gr, 
                 V1 = tab_b$V1[tab_A$V1], 
                 V2 = tab_b$V2[tab_A$V2], 
                 V3 = tab_b$V3[tab_A$V3])

df

      ###
  id gr   V1   V2   V3
1 01  A <NA>    0 <NA>
2 02  A <NA> <NA>    4
3 03  A    5 <NA> <NA>
4 01  B    2 <NA>    4
5 02  B <NA>    1 <NA>
6 03  B <NA>    1    4
7 01  C <NA>    5 <NA>
8 02  C    9 <NA>    3
9 03  C    9 <NA> <NA>
相关问题