我将虹膜数据集转换为data.table格式。我的目标是取所有列的平均值,并使用data.table将它们按Species分组。
DT <-as.data.table(iris)
以下是我想要的输出
DT[,.(mean(Sepal.Length),mean(Sepal.Width),mean(Petal.Length),mean(Petal.Width)),by =.(Species)]
Species V1 V2 V3 V4
1: setosa 5.006 3.428 1.462 0.246
2: versicolor 5.936 2.770 4.260 1.326
3: virginica 6.588 2.974 5.552 2.026
但是当我们有大量列时,使用上面的方式键入所有列名称是时间混乱。我使用下面的命令尝试了这个。但输出的排列方式略有不同
DT[, .(vapply(DT[,!'Species',with=FALSE],mean,FUN.VALUE =1)),by = .(Species)]
Species V1
1: setosa 5.843333
2: setosa 3.057333
3: setosa 3.758000
4: setosa 1.199333
5: versicolor 5.843333
6: versicolor 3.057333
7: versicolor 3.758000
8: versicolor 1.199333
9: virginica 5.843333
10: virginica 3.057333
11: virginica 3.758000
12: virginica 1.199333
有没有办法使用上述类型的东西并摆脱键入所有列名称只是为了取出均值并使用data.table
按物种分组请不要建议使用&#39; = FALSE&#39; 。我已经知道了。
答案 0 :(得分:0)
structure(list(Species = structure(1:3, .Label = c("setosa",
"versicolor", "virginica"), class = "factor"), Sepal.Length = c(5.006,
5.936, 6.588), Sepal.Width = c(3.428, 2.77, 2.974), Petal.Length = c(1.462,
4.26, 5.552), Petal.Width = c(0.246, 1.326, 2.026)), row.names = c(NA,
-3L), class = c("data.table", "data.frame"), .Names = c("Species",
"Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
.internal.selfref = <pointer: 0x0000000003fd0788>)
期望的输出: -
iris <- iris[,lapply(.SD,mean), by=Species, .SDcols = c("Sepal.Length", "Sepal.Width")]
假设您只想要&#34; Sepal.Length&#34;和&#34; Sepal.Width&#34;列。您可以通过稍作修改来实现,如下所示: -
Read()
在data.table中,DT [i,j,by],j必须返回一个列表并且lapply返回列表