我无法找到与我的问题相似的数据集,因此我将数据集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的平均值,并按类型和种类发布平均值Sepal.Length /
答案 0 :(得分:1)
使用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
如果您希望以表格形式使用此格式,则可以使用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