0

我有一个如下所示的数据框列表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 的第一列。

4

2 回答 2

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

如果您有超过 2 个元素:

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
于 2014-04-15T14:57:54.343 回答
1

cbind()正在做它应该做的事情,将列并排放置。如果要合并它们,则需要使用该merge()功能。

如果您的数据始终具有相同的观察结果(以相同的顺序),那么 cbind 将是合适的。在这种情况下,您只需name从除第一个之外的所有 data.frames 中删除该列,然后重命名用计数器标记它们的其他列。

于 2014-04-15T14:54:12.450 回答