我想知道是否有更好的方法将两个data.frames合二为一,将rownames视为一个列,然后将此列与其他data.frame合并。我知道我可以做以下事情
df1$rn <- row(df1)
all <- merge(df1,df2, by.x="rn", by.y="some_column")
我的意思是这会产生冗余数据(rownames as column),根本不需要。那么更聪明的方法呢?
答案 0 :(得分:2)
您可以使用“row.names”或0作为行名称的索引。
使用authors
帮助中的books
和merge
的示例:
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