【问题标题】:Create dataframe from list of dataframe从数据框列表创建数据框
【发布时间】:2016-07-05 16:15:46
【问题描述】:

我有一个列表 myList,其中包含 16 个 data.frames

List of 16

    $ dataframe1           :'data.frame':   20 obs. of  60 variables:
      ..$ Stat            : Factor w/ 16 levels "a","b",..: 16 16 16 16 16 16 16 16 16 16 ...
      ..$ P10             : num [1:31] 1 3 2 2 4 8 0 4 2 5 ...
      ..$ R               : num [1:31] NA NA NA NA NA NA NA NA NA NA ...
      ..$ S               : num [1:31] 0 7 7 1 5 9 3 9 6 2 ...

    $ dataframe2           :'data.frame':   20 obs. of  60 variables:
      ..$ Stat            : Factor w/ 16 levels "c","d",..: 16 16 16 16 16 16 16 16 16 16 ...
      ..$ P10             : num [1:31] 2 1 2 2 5 6 7 2 2 5 ...
      ..$ R               : num [1:31] NA 1 NA NA 2 NA 4 NA NA NA ...
      ..$ S               : num [1:31] 10 2 4 1 5 8 8 8 1 2 ...
...
..

我需要每列中的mean 并在data.frame 中获取结果。

       dataframe1     dataframe2     ....
 Stat  NA             NA
 P10   6              7
 R     NA             3
 S     12             14
 ...   ...            ...             ...

我有这个lapply(myList$variable1, mean),它会返回该列表中一个data.frame 的结果。 ldply(myList, data.frame) 不包括 mean 函数。 我将如何为整个列表执行此操作并将其合并到一个 data.frame 中?

【问题讨论】:

  • 试试sapply(myList, colMeans, na.rm=TRUE)
  • 您的列表结构如何?在您粘贴在上面的输出中,它看起来是高度嵌套的——看起来列表中的第一项是一个名为 Variable1 的数据框,并且该数据框有一列数据框也称为 Variable1...跨度>
  • @akrun 我得到Error in FUN(X[[i]], ...) : 'x' must be numeric
  • 为什么添加一个可重现的例子这么难?
  • @akrun 就是这样。最后一个function(y) 需要与function(x) 一起运行。

标签: r dplyr plyr


【解决方案1】:

我们可以使用嵌套的sapply。第一个循环遍历list,第二个循环遍历data.frame的列,根据列是否为numeric,我们得到mean,否则返回NA。

sapply(myList, function(x) sapply(x, function(y)
              if(is.numeric(y)) mean(y, na.rm=TRUE) else NA))

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2016-02-29
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2020-09-21
    相关资源
    最近更新 更多