A <- data.frame(Item_A = c("00EF", "00EF", "00EF", "00EF", "00EF", "00FR", "00FR"),
Item_B = c(NA, NA, NA, NA, "JAMES RIVER", NA, NA))
B <- data.frame(Item_A = c("00EF", "00EF", "00EF", "00FR", "00FR"),
Item_B = c("JAMES RIVER", NA, "JAMES RIVER",
"RICE MIDSTREAM", "RICE MIDSTREAM"))
预期:
A <- data.frame(Item_A = c("00EF", "00EF", "00EF", "00EF", "00EF", "00FR", "00FR"),
Item_B = c("JAMES RIVER", "JAMES RIVER", "JAMES RIVER",
"JAMES RIVER", "JAMES RIVER", "RICE MIDSTREAM", "RICE MIDSTREAM"))
B <- data.frame(Item_A = c("00EF", "00EF", "00EF", "00FR", "00FR"),
Item_B = c("JAMES RIVER", "JAMES RIVER", "JAMES RIVER",
"RICE MIDSTREAM", "RICE MIDSTREAM"))
我必须根据
Item_B
相同的其他行的Item_B
填写项目Item_A
。例如,数据集Item_B
中的A
的第一个到第四个观察值必须变为“JAMES RIVER”。您能否建议一种方法来填写R中缺少的值?我尝试了许多技术,但无法获得想要的东西。
最佳答案
据我了解的问题,这不仅仅是在每个data.frame的一列中填充缺失值的一种练习。我相信这需要借助查找或映射表来填写属于Item_B
的Item_A
的值:
library(data.table)
# create mapping table from both data.frames
map <- unique(rbindlist(list(A, B)))[!is.na(Item_B)]
# or, in case there are additional columns besides Item_A and Item_B
map <- unique(rbindlist(list(A, B))[!is.na(Item_B), .(Item_A, Item_B)])
map
# join and replace
setDT(A)[map, on = c("Item_A"), Item_B := i.Item_B][]
setDT(B)[map, on = c("Item_A"), Item_B := i.Item_B][]
在连接期间,有两列名为
Item_B
,一列来自第一个数据表A
(或B
,分别),另一列来自第二个数据表map
。为了区分它们,i.
前缀指示i.Item_B
应该从map
中获取。关于r - 使用其他数据填写缺失值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45938081/