基于多个分组变量r计数

时间:2015-07-12 23:25:52

标签: r count dataframe grouping

我只是试图计算“停止”的发生次数。在变量(A)中,对于3个分组变量(B,C,D)中的每一个。

A      B  C  D
start  1  1  1
start  1  1  1
start  2  1  2
start  2  1  2
stop   1  2  1
stop   1  2  1
stop   2  2  1

任何帮助将不胜感激 - 请要求澄清

4 个答案:

答案 0 :(得分:2)

我会转换为data.table

DT <- as.data.table(DF)
DT[A == 'stop', lapply(.SD, sum), .SDcols=c('B', 'C', 'D')]
   B C D
1: 4 6 3

答案 1 :(得分:0)

如果您在hadleyverse工作,可以使用reshape2dplyr执行此操作。首先,您将使用reshape来融合数据,以便B,C,D中的每一个都有自己的行。然后您可以像往常一样group_bytally

library(reshape2)
library(dplyr)

melt(df) %>%
  filter(A == "stop") %>% 
  group_by(variable, value) %>%
  tally()

#    variable value n
#  1        B     1 2
#  2        B     2 1
#  3        C     2 3
#  4        D     1 3

答案 2 :(得分:0)

你的意思是B,C和D的每个组合?如果是这样,这里有一个基础R解决方案:

df <- read.table(text = "A      B  C  D
                         start  1  1  1
                         start  1  1  1
                         start  2  1  2
                         start  2  1  2
                         stop   1  2  1
                         stop   1  2  1
                         stop   2  2  1", header = TRUE)
num.stops <- aggregate((A == "stop") ~ B + C + D, df, FUN = sum)

#   B C D (A == "stop")
# 1 1 1 1             0
# 2 1 2 1             2
# 3 2 2 1             1
# 4 2 1 2             0

答案 3 :(得分:0)

library(dplyr)
df%>%filter(A=='stop')%>%summarise_each(funs(sum),-1)