r - 在 R 中以单元格方式添加一堆类似的数据帧的优雅方法?

标签 r dplyr

我有一个类似类型的 1000 个数据框的列表

dfs<-list()
for (i in 1:1000) {
  dfs[[i]]<-iris[sample(1:length(iris$Sepal.Length),80),-5]
}

其中每一个都是一个 80 x 4 的数据帧。我想以单元格方式添加(或任何其他操作)所有这些数据帧,并将输出作为 80 x 4 数据帧,每个单元格包含 1000 个单元格的总和,或者可能是 1000 个单元格的平均值?

最佳答案

您可以在将数据帧更改为您想要的维度后使用 apply:
例如:

i=nrow(dfs[[1]])
j=ncol(dfs[[1]])
k=length(dfs)
apply(array(unlist(dfs),c(i,j,k)),c(1,2),sum)

     [,1] [,2] [,3] [,4]
[1,] 29.3 15.7 17.6  5.3
[2,] 29.1 16.3 18.3  6.4
[3,] 27.9 15.1 15.6  4.4

如果你想要平均值:
apply(array(unlist(dfs),c(i,j,k)),c(1,2),mean)

     [,1] [,2] [,3] [,4]
[1,] 5.86 3.14 3.52 1.06
[2,] 5.82 3.26 3.66 1.28
[3,] 5.58 3.02 3.12 0.88

如果你想要 max :
apply(array(unlist(dfs),c(i,j,k)),c(1,2),max)
     [,1] [,2] [,3] [,4]
[1,]  7.2  3.6  6.1  2.5
[2,]  6.9  3.8  5.7  2.3
[3,]  6.1  3.5  4.9  1.8

您可以执行任何返回汇总值的函数
data.frame(apply(array(unlist(dfs),c(i,j,k)),c(1,2),paste0,collapse=","))
                   X1                  X2                X3                  X4
1   4.8,7.2,6,6.4,4.9 3.1,3.6,2.2,3.2,3.6 1.6,6.1,4,4.5,1.4   0.2,2.5,1,1.5,0.1
2 4.6,6.9,5.8,5.1,6.7   3.6,3.2,2.7,3.8,3   1,5.7,5.1,1.5,5 0.2,2.3,1.9,0.3,1.7
3 4.8,5.8,5.5,6.1,5.7   3.4,2.6,3.5,3,2.6 1.9,4,1.3,4.9,3.5   0.2,1.2,0.2,1.8,1

关于r - 在 R 中以单元格方式添加一堆类似的数据帧的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333845/

相关文章:

r - 在 R 中控制 POSIX 时间差输出

r - 如何将值从一个数据帧传输到另一个数据帧?

r - 如何计算条件间隔的案例?小费

r - 按 R 中的特定条件对列进行排序

r - 在r中的数据框中连续按年求和

r - 如何删除少于 n 个成员的因子

R:如何在表达式中获取和设置命名参数

r - 如何根据名称对列表的列表进行子集化

r - Left_join : Error: cannot allocate vector of size "small" Mb

r - 如果 dplyr 中按名称引用的某些变量不适用,则删除数据框行