在聚合中嵌套 SUM 和 MEAN 以获得每组分数的均值
Nesting a SUM and a MEAN in an aggregate to get means of scores per group
我找不到与我的问题相似的数据集,所以我更改了数据集 Iris(R 中的数据集)以使其看起来相似 - 它足够接近了!
data = iris
data$type = gl(5,30,150,labels=c("group1","group2","group3","group4","group5"))
data$ID = gl(30,5,150)
然后我用了下面的代码
xtabs(Sepal.Length ~ Species + type, aggregate(Sepal.Length ~ Species + type + ID, data, mean))
这导致
type
Species group1 group2 group3 group4 group5
setosa 30.16 19.90 0.00 0.00 0.00
versicolor 0.00 12.20 35.88 11.28 0.00
virginica 0.00 0.00 0.00 26.24 39.64
我的理解是,我的代码所做的是将每个 ID Sepal.Length 相加,然后按每个物种和类型取这些值的平均值。
这是正确的吗?
如果没有,我怎么得到这个?
此外,如果我的数据是每个 ID 都有多种类型,我将如何获得它? (不知道如何在 R 中构建它)
实际上,为了完全清楚
我想要的是一个代码,它将每个 ID 和类型的 Sepal.Length 相加,然后它将对所有 ID 和 post 取平均值 Sepal.Length按类型和物种/
与data.table
:
library(data.table)
setDT(data)
#sum of Sepal.Length for each ID AND type
data[, id_type_sum := sum(Sepal.Length), by = .(ID, type)]
# mean of this variable by type and species
data[, mean(id_type_sum), by = .(type, Species)]
# type Species V1
# 1: group1 setosa 25.13333
# 2: group2 setosa 24.87500
# 3: group2 versicolor 30.50000
# 4: group3 versicolor 29.90000
# 5: group4 versicolor 28.20000
# 6: group4 virginica 32.80000
# 7: group5 virginica 33.03333
如果你想要 table 格式,你可以使用 data.table
的 dcast
方法:
library(magrittr) # for the %>% operator
data[, mean(id_type_sum), by = .(type, Species)] %>%
dcast(Species ~ type)
结果:
Species group1 group2 group3 group4 group5
1: setosa 25.13333 24.875 NA NA NA
2: versicolor NA 30.500 29.9 28.2 NA
3: virginica NA NA NA 32.8 33.03333
我找不到与我的问题相似的数据集,所以我更改了数据集 Iris(R 中的数据集)以使其看起来相似 - 它足够接近了!
data = iris
data$type = gl(5,30,150,labels=c("group1","group2","group3","group4","group5"))
data$ID = gl(30,5,150)
然后我用了下面的代码
xtabs(Sepal.Length ~ Species + type, aggregate(Sepal.Length ~ Species + type + ID, data, mean))
这导致
type
Species group1 group2 group3 group4 group5
setosa 30.16 19.90 0.00 0.00 0.00
versicolor 0.00 12.20 35.88 11.28 0.00
virginica 0.00 0.00 0.00 26.24 39.64
我的理解是,我的代码所做的是将每个 ID Sepal.Length 相加,然后按每个物种和类型取这些值的平均值。
这是正确的吗?
如果没有,我怎么得到这个?
此外,如果我的数据是每个 ID 都有多种类型,我将如何获得它? (不知道如何在 R 中构建它)
实际上,为了完全清楚
我想要的是一个代码,它将每个 ID 和类型的 Sepal.Length 相加,然后它将对所有 ID 和 post 取平均值 Sepal.Length按类型和物种/
与data.table
:
library(data.table)
setDT(data)
#sum of Sepal.Length for each ID AND type
data[, id_type_sum := sum(Sepal.Length), by = .(ID, type)]
# mean of this variable by type and species
data[, mean(id_type_sum), by = .(type, Species)]
# type Species V1
# 1: group1 setosa 25.13333
# 2: group2 setosa 24.87500
# 3: group2 versicolor 30.50000
# 4: group3 versicolor 29.90000
# 5: group4 versicolor 28.20000
# 6: group4 virginica 32.80000
# 7: group5 virginica 33.03333
如果你想要 table 格式,你可以使用 data.table
的 dcast
方法:
library(magrittr) # for the %>% operator
data[, mean(id_type_sum), by = .(type, Species)] %>%
dcast(Species ~ type)
结果:
Species group1 group2 group3 group4 group5
1: setosa 25.13333 24.875 NA NA NA
2: versicolor NA 30.500 29.9 28.2 NA
3: virginica NA NA NA 32.8 33.03333