2015-07-12 69 views
1

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

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 

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

+2

目前尚不清楚你想要达到的目的。你可以看看'A ==“stop”'的行数,但我不是这种情况。提供所需的输出。 – SabDeM

回答

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 
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 
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 
0
library(dplyr) 
df%>%filter(A=='stop')%>%summarise_each(funs(sum),-1)