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_BItem_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/

10-12 17:49