2016-06-16 14 views
0

アイリスデータセットをdata.tableフォーマットに変換しました。私の目的は、すべてのカラムを平均してdata.tableを使用してSpeciesでグループ化することでした。以下は名前を入力せずにdata.tableのカラムを使用するショートカット

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 

に配置されているcommand.But使用して、これを試してみましたdata.tableを使用して種別にグループ化してください。

「= = FALSE」は使用しないでください。私はすでにそれを知っていた。

+0

リストとlapplyリターンリストを返す必要があり、これが重複かもしれないと思います.SDcols = names(DT)[1:4]] 'または類似のものはあなたを並べ替えるべきです。 – thelatemail

+0

正確に一致するものが見つかるまで、おそらくhttp://stackoverflow.com/questions/16783598/r-datatable-apply-a-function-to-a-subset-of-columnsの複製です。 – thelatemail

+0

私には役に立たなかった。それを実行できますか? – learner

答えて

0
iris <- as.data.table(iris) 
iris <- iris[,lapply(.SD,mean), by=Species] 

所望の出力: -

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>) 

はあなただけ "Sepal.Length" と "Sepal.Width" 列の平均値とします。あなたは次のようにわずかな変更であることを行うことができます: - data.tableで

iris <- iris[,lapply(.SD,mean), by=Species, .SDcols = c("Sepal.Length", "Sepal.Width")] 

を、DT [I、Jは、で]、jは

関連する問題