R - 聚合导致名称(数据)和头部(数据)中的列之间存在差异
R - aggregate results in disparity between names(data) and columns in head(data)
我有一个包含 3 个因子(strain
、genotype
、region
)和 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.mn
和 volume.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"
所以aggregate
实际上已经把一个矩阵塞进了volume
列。您可以使用
索引这些值
summaryData$volume[,"mn"]
summaryData$volume[,"stdev"]
或者用
把它变成一个合适的data.frame
summaryData <- do.call(data.frame, summaryData)
summaryData$volume.mn
summaryData$volume.stdev
我有一个包含 3 个因子(strain
、genotype
、region
)和 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.mn
和 volume.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"
所以aggregate
实际上已经把一个矩阵塞进了volume
列。您可以使用
summaryData$volume[,"mn"]
summaryData$volume[,"stdev"]
或者用
把它变成一个合适的data.framesummaryData <- do.call(data.frame, summaryData)
summaryData$volume.mn
summaryData$volume.stdev