如何連接和覆蓋數據似乎是一個常見請求,但我還沒有找到適用於整個數據集的優雅解決方案。 (注意:爲了簡化數據,我將只使用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