2014-09-04 109 views
0

我有一個數據幀,其中包含一個變量,該級別出現多次,第二個數據幀包含此變量的唯一級別的代碼。我想將包含代碼的列添加到我的數據框中。這可以通過一個例子來最好地說明:根據行名稱將列合併到一個數據幀

f1 <- rep(c("A","B","C"), each = 3) 
df1 <- data.frame(f1,v1=runif(9)) 

    f1   v1 
1 A 0.83523506 
2 A 0.13833162 
3 A 0.15354252 
4 B 0.62046499 
5 B 0.27823892 
6 B 0.04629973 
7 C 0.85571269 
8 C 0.10963561 
9 C 0.70576556 

df2 <- data.frame(f1=c("A","B","C"), n1=c("sp1","sp2","sp3")) 

    f1 n1 
1 A sp1 
2 B sp2 
3 C sp3 

df3 <- data.frame(f1=rep(c("A","B","C"),each = 3),n1=rep(c("sp1","sp2","sp3"),each =3),v1=df1$v1) 

    f1 n1   v1 
1 A sp1 0.83523506 
2 A sp1 0.13833162 
3 A sp1 0.15354252 
4 B sp2 0.62046499 
5 B sp2 0.27823892 
6 B sp2 0.04629973 
7 C sp3 0.85571269 
8 C sp3 0.10963561 
9 C sp3 0.70576556 

我想找到一個函數來獲取df3。

回答

0

有很多使用基本功能merge方式

很簡單

merge(df1,df2) 

這裏是另外一個使用dplyr

library(dplyr) 
df1 %>% 
    left_join(df2) 

# f1  v1 n1 
#1 A 0.2283936 sp1 
#2 A 0.3709602 sp1 
#3 A 0.2508059 sp1 
#4 B 0.5654418 sp2 
#5 B 0.3206994 sp2 
#6 B 0.2529365 sp2 
#7 C 0.7200121 sp3 
#8 C 0.5247517 sp3 
#9 C 0.1914874 sp3 

我的號碼與你的變化,你沒有使用set.seed設置隨機數的生成

+0

非常感謝你,它完美的作品。 – user34771 2014-09-04 15:26:27

+0

它似乎有效,但在檢查結果後,我注意到由於合併df而出現了一些NA值。可能是因爲要合併的變量的級別不是相同的順序?如何充分發揮? – user34771 2014-09-04 15:47:42

+0

好吧,你需要製作一個更長的例子。不管你的dfs在什麼順序都不重要,因爲合併在工作時執行排序。您可以嘗試合併(df1,df2,by =「f1」),以便對您正在合併的變量進行超級特定。 – jalapic 2014-09-04 16:03:30

相關問題