2016-10-10 66 views
0

我試圖結合2個數據幀(19602000)。這些數據幀長度不同,但列名相同。我第一次嘗試是使用plyr包和綁定基於列名:梳理數據幀,行沒有正確排隊

library(plyr) 
combined <- rbind.fill(1960[c("Name","Gender","1960")],2000[c("Name","Gender","2000")]) 

這是不錯,但我注意到,這是不正確的合併行。該數據在數據幀的樣本顯示,有沒有女性叫亞倫出生於1960年的第一行上,但第3行顯示有20

Name Gender 1960 2000 
Aaron F  NA 35 29613 
Aaron M  NA 9548 2728 
Aaron F  20 NA 7511 
Aaron M  1772 NA 

我又試圖smartbind但得到了同樣的結果:

library(gtools) 
t <- smartbind(1960, 2000) 

我不知道如何獲得女性和男性的條目對應。我也嘗試合併數據幀,但我不太喜歡輸出。

m <- merge(1960, 2000, by = c("Name"), all = TRUE) 
m[is.na(m)] <- 0 

如果任何人可以建議如何根據名稱和性別讓行正確排隊,我真的很感激。

編輯: 這兩個數據幀由3米欄:NameGenderTotalTotal列表示具有特定名稱的年份中的人數。 1960年的數據框顯示了該年的總名稱,2000年的數據框顯示了該年的總數。當我合併2數據幀輸出爲:

Name Gender.x 1960 Gender.y 2000 
Aaron F   20 F   35 
Aaron F   20 M   9548 
Aaron M   1772 F   35 
Aaron M   1772 M   9548 

我不喜歡他們的合併是什麼使M和F男女都出現在同一行。我可以在數據幀輸出中操作它們,以便它們排隊,但如果你知道我的意思,我寧願用代碼正確地生成它。

+0

你能舉出1960年和2000年數據框架的例子嗎?你的預期產出究竟是什麼?如果目標是爲1960年和2000年的名稱計數創建一個包含單獨列的數據框,那麼「合併」就是要走的路。你不喜歡什麼結果? – jdobres

+0

這裏的問題似乎是,您沒有可以合併的觀察值的唯一標識符。如果您只按名稱合併,並且多個人具有相同的名稱,則merge命令無法知道誰是同一個人。您可以嘗試通過使用'paste0'命令組合多個列來創建唯一標識符。 –

+0

謝謝jdobres,Daniel Winkler和Scarabee的幫助。我剛剛開始與R,並仍然試圖讓我的頭。我編輯了我的原始帖子,提供更多信息。我會嘗試唯一標識符路由,看看如何解決。謝謝! – Karen

回答

0

在結束這個問題,以供將來參考:

m <- merge(yob1960, yob2000, by = c("Name", "Gender"), all = TRUE)

這將保持姓名和性別的組合在同一行中兩個年度。