我有两个数据框tab_A
和tab_b
,其中包含类似的列名:group
,V1:V3
。第一个有额外的col id
。 tab_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>
提前感谢您的关注。
答案 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>