假设我有一个包含10列的数据集。其中9个是数字,1个是分类,其值为高中低。我想通过R中所有9个数字列的分类变量来总结(类似于exif中的sumif和countif)。
如何做到这一点?我是R的新手,任何帮助都会很棒!谢谢!
答案 0 :(得分:2)
如果您的数据框名为df
且您的分类变量名为group.var
,则可以执行以下操作:
library(dplyr)
df %>% group_by(group.var) %>%
summarise_each(funs(n(),sum))
内置iris
数据框的示例:
iris %>% group_by(Species) %>%
summarise_each(funs(n(), sum))
Species Sepal.Length_n Sepal.Width_n Petal.Length_n Petal.Width_n Sepal.Length_sum Sepal.Width_sum Petal.Length_sum Petal.Width_sum
(fctr) (int) (int) (int) (int) (dbl) (dbl) (dbl) (dbl)
1 setosa 50 50 50 50 250.3 171.4 73.1 12.3
2 versicolor 50 50 50 50 296.8 138.5 213.0 66.3
3 virginica 50 50 50 50 329.4 148.7 277.6 101.3
还有许多其他选项(例如data.table
包,以及使用tapply
,aggregate
等的基本R解决方案。)
答案 1 :(得分:0)
在转移到令人眼花缭乱的软件包数组之前,有助于了解这些类型操作的基本R惯用语(尽管它们很有用)。
by(iris, iris$Species, summary)
将拆分data.frame并将函数应用于每个子集。如果您需要对向量而不是data.frame进行操作,请参阅?tapply
。
tapply(iris$Sepal.Length, iris$Species, summary)