如何通过另一个data.frame中的某些列合并rowname?

时间:2010-10-26 08:53:06

标签: r

我想知道是否有更好的方法将两个data.frames合二为一,将rownames视为一个列,然后将此列与其他data.frame合并。我知道我可以做以下事情

 df1$rn <- row(df1) 
 all <- merge(df1,df2, by.x="rn", by.y="some_column")

我的意思是这会产生冗余数据(rownames as column),根本不需要。那么更聪明的方法呢?

2 个答案:

答案 0 :(得分:2)

您可以使用“row.names”或0作为行名称的索引。

使用authors帮助中的booksmerge的示例:

rownames(authors) <- authors$surname
merge(authors, books, by.x = "row.names", by.y = "name")

答案 1 :(得分:1)

“更聪明的方式”实际上取决于您的数据,而我们没有。但

df1 <- data.frame(
    X1 = 1:10,
    id = letters[1:10]
)

df2 <- data.frame(
    X2 = 10:1,
    X3 = letters[11:20]
)
rownames(df2) <- df1$id
df2 <- df2[sample.int(10),]

cbind(df1,df2[match(df1$id,rownames(df2)),])

编辑:Vitoshka的答案是你正在寻找的答案。如果我在查看?merge的帮助文件时感到困扰,我也会知道...

我留下我的解决方案,以防有人需要快速替代合并:

> system.time(replicate(1000,cbind(df1,df2[match(df1$id,rownames(df2)),])))
   user  system elapsed 
   0.57    0.00    0.57 
> system.time(replicate(1000,merge(df1,df2,by.x="id",by.y="row.names")))
   user  system elapsed 
   2.36    0.02    2.37