按列值合并数据框列表

时间:2014-04-15 14:16:20

标签: r merge dataframe cbind

我有一个数据框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的第一列。

2 个答案:

答案 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列,然后重命名其他列,用计数器标记它们。