【问题标题】:how to merge data frames which are elements in a list? [duplicate]如何合并作为列表元素的数据框? [复制]
【发布时间】:2013-11-26 11:53:33
【问题描述】:

考虑下面的列表。

lst <- list()
lst[[1]] <- data.frame(category = c(1:10), freq = rnorm(10))
lst[[2]] <- data.frame(category = seq(4,26,2), freq = rnorm(12))
lst[[3]] <- data.frame(category = 2:8, freq = rnorm(7))

鉴于它们具有不同的维度和级别,我如何按 $category 合并此列表中的数据框,从而生成如下所示的 data.frame?

category  freq.1      freq.2     freq.3
    1   1.2496154         NA         NA
    2  -1.3537722         NA -1.3257535
    3  -0.3976305         NA  0.5761957
    4   0.7721428 -0.2360636 -1.0953490
    5   0.7653834         NA  0.9037617
    6   0.2192559 -0.2543082 -1.6640824
    7   0.3400192         NA -1.2961707
    8  -0.8457081 -0.7431021  0.9321560
    9  -1.2132615         NA         NA
   10   1.8387899  0.8342264         NA
   12          NA -0.5409164         NA
   14          NA  0.1638546         NA
   16          NA  0.6420546         NA
   18          NA -0.5110151         NA
   20          NA -0.8262690         NA
   22          NA  1.2406462         NA
   24          NA -1.1497992         NA
   26          NA -0.4338807         NA

【问题讨论】:

  • 这个问题经常被问到。对“[r] merge data.frames”的简单搜索就会得到答案。

标签: r


【解决方案1】:
Reduce(function(x, y) merge(x, y, by = 'category', all = TRUE), lst)

【讨论】:

  • 如果我添加“lst[[4]]
  • @aguiar 这很奇怪 - 我不知道发生了什么,但可能与这个问题有关:stackoverflow.com/q/8898905/817778
  • 作为一种解决方法,您可以事先重命名列:for (i in seq_along(lst)) names(lst[[i]]) &lt;- c('category', paste0('freq.', i))
  • 谢谢@eddi,这行得通!
猜你喜欢
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2013-02-11
  • 2010-12-03
  • 2021-11-24
  • 2019-08-11
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多