R - 名称(数据)和头(数据)中的列之间的差异的聚合结果

标签 r aggregate head names

我有一个长格式数据集,包含 3 个因子( straingenotyperegion )和 1 个值( volume )。该数据集名为individualData 。基本上我想做的是计算 strain * genotype * region 的每个组合的体积平均值和标准偏差,除了那些没有任何数据的组合(因为基因型标签取决于菌株)。看来我已经能够使用以下命令来执行此操作,因为它会生成预期的行数:

  summaryData = aggregate( .~strain:genotype:region, individualData, FUN = function(x) c(mn=mean(x), stdev=sd(x)))

问题是 head(summaryData)给我 5 列( volume 替换为 volume.mnvolume.stdev ),正如我所料,但是 names(summaryData)colnames(summaryData)只给我 4 列——即我原来的列。如何正确引用这些列?我只想将其折叠成 data.frame我了解如何与之合作。任何有更多经验的人 aggregate函数知道如何做到这一点吗?

谢谢!

最佳答案

首先,这里有一些可重现的示例数据,我假设它们与您的结构匹配

set.seed(15)
individualData <- data.frame(
    volume = runif(120),
    expand.grid(region=1:2, genotype=1:3, strain=1:2)
)

然后你就可以运行了

summaryData = aggregate( .~strain:genotype:region, individualData, 
    FUN = function(x) c(mn=mean(x), stdev=sd(x)))

如果您查看返回内容的结构,您会得到

str(summaryData)
# 'data.frame':   12 obs. of  4 variables:
#  $ strain  : int  1 2 1 2 1 2 1 2 1 2 ...
#  $ genotype: int  1 1 2 2 3 3 1 1 2 2 ...
#  $ region  : int  1 1 1 1 1 1 2 2 2 2 ...
#  $ volume  : num [1:12, 1:2] 0.526 0.409 0.407 0.445 0.566 ...
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : NULL
#   .. ..$ : chr  "mn" "stdev"

so aggregate 实际上已将一个矩阵填充到 volume 列中。您可以使用以下方式对这些值进行索引

summaryData$volume[,"mn"]
summaryData$volume[,"stdev"]

或者将其转换为正确的 data.frame

summaryData <- do.call(data.frame, summaryData)
summaryData$volume.mn
summaryData$volume.stdev

关于R - 名称(数据)和头(数据)中的列之间的差异的聚合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330833/

相关文章:

r - 如何以编程方式将外部生成的图像插入 R markdown?

python - 在 Pandas 中重采样和归一化不规则时间序列数据

C++ 聚合没有虚函数?

java - ListNode header value 不会打印

zend-framework - 如何在 Zend Framework 中使用 headScript 添加脚本文件?

java - 设置为链表头的初始空值会发生什么情况?

r - ggplot2 中通过对比度改变堆叠颜色

使用sparklyr从本地桌面读取存储在hdfs上的csv文件

json - 深度嵌套类型的 Elasticsearch 聚合

r - R 中的成对运算