我有一个数据框df_list
列表,如下所示:
head(df_list[[1]])
score name rank
921 9718 aba 921
346 11387 aca 346
head(df_list[[2]]
score name rank
1080 9023 aba 1080
156 12276 aca 156
我希望将它们合并在一起,以便我得到像
这样的东西 score.1 rank.1 score.2 rank.2
aba 9718 921 9023 1080
aca 11387 346 12276 156
我尝试使用do.call和cbind之类的
tmp <- do.call("cbind", df_list)
然而,这给了我
head(tmp)
score name rank score name rank
921 9718 aba 921 9718 aba 1080
346 11387 aca 346 11387 aca 156
当我尝试使用tmp[tmp$rank]
获得排名时,我只能获得名为rank的第一列。
答案 0 :(得分:2)
使用merge
merge(dt1,dt2,by='name', suffixes = c(".1",".2"))
name score.1 rank.1 score.2 rank.2
1 aba 9718 921 9023 1080
2 aca 11387 346 12276 156
如果你有两个以上的元素:
ll <- list(dt1,dt2)
Merge <-
function(x,y)
merge(x,y,by='name', suffixes = c(".1",".2"))
Reduce(Merge,ll)
name score.1 rank.1 score.2 rank.2
1 aba 9718 921 9023 1080
2 aca 11387 346 12276 156
答案 1 :(得分:1)
cbind()
正在完成它的意图,将列并排放置。如果要合并它们,则需要使用merge()
函数。
如果您的数据总是具有相同的观察结果(以相同的顺序),那么cbind将是合适的。在这种情况下,您只需从除第一个以外的所有data.frames中删除name
列,然后重命名其他列,用计数器标记它们。