R:Sumif和Countif的等价于R中列的分类变量

时间:2015-09-14 22:14:44

标签: r group-by countif sumifs

假设我有一个包含10列的数据集。其中9个是数字,1个是分类,其值为高中低。我想通过R中所有9个数字列的分类变量来总结(类似于exif中的sumif和countif)。

如何做到这一点?我是R的新手,任何帮助都会很棒!谢谢!

2 个答案:

答案 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包,以及使用tapplyaggregate等的基本R解决方案。)

答案 1 :(得分:0)

在转移到令人眼花缭乱的软件包数组之前,有助于了解这些类型操作的基本R惯用语(尽管它们很有用)。

by(iris, iris$Species, summary)

将拆分data.frame并将函数应用于每个子集。如果您需要对向量而不是data.frame进行操作,请参阅?tapply

tapply(iris$Sepal.Length, iris$Species, summary)