将 data.tables 附加到已经存在的 NA 条目
Append data.tables with already existing NA entries
当 ID 重叠时,我试图用另一个数据集填充一个大型数据集。我有一个 data.table:
library(data.table)
dt1 <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,NA,NA),
z = c(1, NA, NA))
在某些变量中有 NA。我有另一个 data.table,其中包含有关这些变量的信息:
dt2 <- data.table(id = c("b","c"),
y = c(4,5),
z = c(6,7))
我想通过用 dt2
填充 dt1
来将两者结合起来。我不是在寻找解决方法(一个在 p.s 中),因为我认为有一些聪明的连接或合并方法可以做到这一点。我只是找不到它。实际上,x
和 y+z
都是很多列,因此基于一列的条件无济于事(尽管我可以获得字符向量中的列)。
goal <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,4,5),
z = c(1, 6, 7))
p.s.: 这是一个丑陋的解决方法,但我认为这种方法在我的函数深处容易出错,其中列一直在变化等:
adder <- merge(dt2, dt1[id %in% dt2[, id],id,x], by ="id", all = T)
done <- dt1[!is.na(y) & !is.na(z)]
rbind(adder, done)
更新加入是否适合您的案例?
library(data.table)
dt1 <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,NA,NA),
z = c(1, NA, NA))
dt2 <- data.table(id = c("b","c"),
y = c(4,5),
z = c(6,7))
dt1[dt2, on=.(id), c("y", "z") := .(i.y, i.z)][]
#> id x y z
#> 1: a 1 1 1
#> 2: b 2 4 6
#> 3: c 3 5 7
由 reprex package (v2.0.1)
创建于 2021-08-12
当 ID 重叠时,我试图用另一个数据集填充一个大型数据集。我有一个 data.table:
library(data.table)
dt1 <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,NA,NA),
z = c(1, NA, NA))
在某些变量中有 NA。我有另一个 data.table,其中包含有关这些变量的信息:
dt2 <- data.table(id = c("b","c"),
y = c(4,5),
z = c(6,7))
我想通过用 dt2
填充 dt1
来将两者结合起来。我不是在寻找解决方法(一个在 p.s 中),因为我认为有一些聪明的连接或合并方法可以做到这一点。我只是找不到它。实际上,x
和 y+z
都是很多列,因此基于一列的条件无济于事(尽管我可以获得字符向量中的列)。
goal <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,4,5),
z = c(1, 6, 7))
p.s.: 这是一个丑陋的解决方法,但我认为这种方法在我的函数深处容易出错,其中列一直在变化等:
adder <- merge(dt2, dt1[id %in% dt2[, id],id,x], by ="id", all = T)
done <- dt1[!is.na(y) & !is.na(z)]
rbind(adder, done)
更新加入是否适合您的案例?
library(data.table)
dt1 <- data.table(id = c("a","b","c"),
x = 1:3,
y = c(1,NA,NA),
z = c(1, NA, NA))
dt2 <- data.table(id = c("b","c"),
y = c(4,5),
z = c(6,7))
dt1[dt2, on=.(id), c("y", "z") := .(i.y, i.z)][]
#> id x y z
#> 1: a 1 1 1
#> 2: b 2 4 6
#> 3: c 3 5 7
由 reprex package (v2.0.1)
创建于 2021-08-12