我只是试图在变量(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
任何帮助,将不胜感激 - 请要求澄清
我只是试图在变量(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
任何帮助,将不胜感激 - 请要求澄清
我会转换成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
如果你在hadleyverse工作,你可以做到这一点使用reshape2
和dplyr
。首先,您将使用reshape
来融合数据,以便B,C,D中的每一个都有自己的行。然后像往常一样,您可以group_by
和tally
。
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
你是指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
library(dplyr)
df%>%filter(A=='stop')%>%summarise_each(funs(sum),-1)
目前尚不清楚你想要达到的目的。你可以看看'A ==“stop”'的行数,但我不是这种情况。提供所需的输出。 – SabDeM