2012-09-11 34 views
10

這應該是簡單的,我可能只是不懂事,但是...... 我需要DF1的行名和DF2即列合併兩個數據幀合併由row.name和列

df1<-data.frame(x=1:3,y=4:6) 
rownames(df1)<-c("a","b","c") 
df1 
    x y 
a 1 4 
b 2 5 
c 3 6 

df2<-data.frame(site=c("a","b"),p=5:6,q=10:11) 
df2 
    site p q 
    a 5 10 
    b 6 11 

合併應出示:

df3<-data.frame(site=c("a","b"),p=5:6,q=10:11,x=1:2,y=4:5) 
df3 
    site p q x y 
    a 5 10 1 4 
    b 6 11 2 5 

我已經試過

merge(df1,df2,by.x=row.names(df1),by.y=df2$site) 

,但得到的錯誤

錯誤fix.by(by.x,X): '由' 必須指定唯一有效的列(S)

我在做什麼錯?

+4

爲什麼不能簡單地做'$ DF1網站< - 在合併之前row.names(DF1)'?錯誤消息很明顯。 – Roland

回答

11

這裏有一個選項:

merge(df1, df2, by.x = "row.names", by.y = "site") 
    Row.names x y p q 
1   a 1 4 5 10 
2   b 2 5 6 11 
+1

我明白了。我正在調用列和row.names錯誤!謝謝 – Elizabeth

+0

@伊麗莎白,FYI,我剛剛意識到,切換'df1'和'df2'('merge(df2,df1,by.x =「site」,by.y =「row.names」))會導致一個'data.frame',其中第一列被命名爲「site」。我想,當指定'by.x'和'by.y'時,就會選擇第一個名字。 – A5C1D2H2I1M1N2O1R2T1

+0

噢,好吧,知道了。謝謝。 – Elizabeth

4

'by'參數需要是列名稱。像這樣的東西會工作

merge(cbind(df1, row=row.names(df1)), df2, by.x="row", by.y="site")