2015-07-12 70 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)