如何连接和覆盖数据似乎是一个常见请求,但我还没有找到适用于整个数据集的优雅解决方案。 (注意:为了简化数据,我将只使用1和NAs作为值和列的一小部分,但实际上我有几百个具有不同值的列)。使用另一个表中的数据连接并覆盖一个表中的数据
我有一个数据表(d1)在某些列和行中有NA值。
library(data.table)
d1 = fread(
"r id v1 v2 v3
1 A 1 1 1
2 B 1 1 1
3 C 1 NA NA
4 D 1 1 NA
5 E 1 NA 1")[, r := NULL]
而且我有一个包含额外的列以及从D1现有列丢失的数据点的另一个数据表(D2)。
d2 = fread(
"r id v2 v3 v4 v5
1 C 1 1 1 1
2 D 1 1 1 1
3 E 1 1 1 1")[, r := NULL ]
我想基本上加盟+覆盖D1与D2中的所有数据,确保课程的名字,以匹配ID和列的行,如下图所示。
> d12
id v1 v2 v3 v4 v5
1 A 1 1 1 NA NA
2 B 1 1 1 NA NA
3 C 1 1 1 1 1
4 D 1 1 1 1 1
5 E 1 1 1 1 1
附加方案:我也想知道如何可以做到这一点,如果你只想在D1更新NA值,也就是确保现有的非NA值不会被覆盖。 (为了使这更容易可视化,我将包含1和0的新表)。
例如,如果我们已经D3
d3 = fread(
"r id v1 v2 v3
1 A 1 1 1
2 B 1 1 1
3 C 1 0 NA
4 D 1 1 0
5 E 1 NA 1")[, r := NULL ]
我们想加入d2和只覆盖港定居人士获得:
> d32
id v1 v2 v3 v4 v5
1 A 1 1 1 NA NA
2 B 1 1 1 NA NA
3 C 1 0 1 1 1
4 D 1 1 0 1 1
5 E 1 1 1 1 1
仅供参考,下面是一些其他职位解决这个问题,但只一个或两个栏目。我正在寻找的解决方案应该允许一个表中的数据被许多(如果不是全部)另一个表中的列覆盖。
Merge data frames and overwrite values
Merge two data frame and replace the NA value in R
一个data.table为基础的解决方案是首选,但其他人的欢迎。
它是'by =“id”'? – Suren
由于行绑定导致数据不完整,因此不会执行此操作。 – AlexR