1
我一直在使用dplyr
和merge
函數,但是我只是遇到了一個我無法弄清楚如何以簡單的方式完成的任務。我想合併兩個數據框。第二個數據框有一些列丟失。我希望合併的輸出將這些值填入第一個數據幀的相應值。如何合併填充R中缺失值的2個數據幀?
的數據幀是這樣的:
#df1
participant = c(1,2,3)
age = c(18,23,19)
gender = c(rep("female",2),"male")
experiment = rep("noun",3)
rt = c(218,111,546)
df1 = data.frame(participant, age, gender,experiment,rt)
participant age gender experiment rt
1 1 18 female noun 218
2 2 23 female noun 111
3 3 19 male noun 546
#df2
participant = c(1,2,3)
experiment = rep("verb",3)
rt = c(238,251,140)
df2 = data.frame(participant, experiment,rt)
participant experiment rt
1 1 verb 238
2 2 verb 251
3 3 verb 140
這是輸出數據幀看起來應該像:
participant age gender experiment rt
1 1 18 female noun 218
2 2 23 female noun 111
3 3 19 male noun 546
4 1 18 female verb 238
5 2 23 female verb 251
6 3 19 male verb 140
的目標是,df2
使用列參與者合併,並且列的年齡和性別的值取自df1
。我已經嘗試了很多東西(所有類型的join
,rbind.fill
等),我也在論壇中四處看了一下,但我找不到一個簡單的方法來實現綁定兩個數據框的行並填充缺失值在df2
中使用特定列作爲參考。在我的例子中,只有2列需要填寫(年齡和性別),但我的真實df1
還有更多,所以我想避免用手指定它們。
如果您有任何數據合併嚮導有建議,我將非常感激!
有什麼辦法可以讓合併(df1,df2,all = TRUE)工作來完成這項任務嗎? 您會收到年齡和性別的缺失值,剩下的唯一事情就是將年齡和性別值複製到每個觀察值。是否有快速的方法來爲每個匹配的參與者複製這些值。 很好的解決方案btw。 – InfiniteFlashChess
@InfiniteFlashChess我想你可以在'merge'ing之後使用同樣的方法來替換'rbindlist'解決方案中的'NA'值。但是,我認爲'merge'會比'rbindlist'慢# – akrun
@akrun:謝謝!我希望有一些內置的方法可以用'dplyr'完成,但是你的'base R'解決方案很好。我認爲我比rbindlist更喜歡它,因爲它不需要指定要手動填充的列(我的'df1'有一堆,不僅僅是兩個,所以它可能會很乏味) – Sol