我具有以下结构的数据,其中为每个响应者分配了一个状态可能为TRUE或FALSE的任务。
month Responder Status Department
2020-02-01 A TRUE 1
2020-02-01 B FALSE 1
2020-02-01 B TRUE 1
2020-02-01 C TRUE 1
2020-02-01 C TRUE 1
2020-03-01 D FALSE 2
2020-03-01 E FALSE 1
2020-03-01 B FALSE 1
2020-03-01 F FALSE 2
2020-03-01 F TRUE 2
2020-03-01 F TRUE 2
我想输出一个数据帧,以便给每个响应者一个Status = FALSE的概率。 我想按月和部门将这些结果分组如下:
month Responder Prob_False N n
2020-02-01 A 0 1 0
2020-02-01 B 0.5 2 1
2020-02-01 C 0 2 0
2020-03-01 B 1 1 1
2020-03-01 D 1 1 1
2020-03-01 E 1 1 1
2020-03-01 F 0.333 3 1
其中N是当月分配给响应者的任务总数,n是具有FALSE状态的任务数,按月和响应者分组。
我正在尝试使用dplyr中的group_by并汇总函数,但我想我没有掌握针对此特定问题的正确应用。
答案 0 :(得分:2)
我们可以对逻辑列的mean
进行分组,并在获取n()
的逻辑向量sum
的同时,用FALSE
来获得频率计数。当我们取反(!
时,TRUE/FALSE
变为FALSE/TRUE
,并且TRUE / FALSE将存储为1/0
,因此mean
或sum
起作用
library(dplyr)
df1 %>%
group_by(month, Responder) %>%
summarise(Prob_False = mean(!Status), N = n(), n = sum(!Status))
# A tibble: 7 x 5
# Groups: month [2]
# month Responder Prob_False N n
# <chr> <chr> <dbl> <int> <int>
#1 2020-02-01 A 0 1 0
#2 2020-02-01 B 0.5 2 1
#3 2020-02-01 C 0 2 0
#4 2020-03-01 B 1 1 1
#5 2020-03-01 D 1 1 1
#6 2020-03-01 E 1 1 1
#7 2020-03-01 F 0.333 3 1
即mean(!Status)
基本上是sum(Status == FALSE)/n()
df1 <- structure(list(month = c("2020-02-01", "2020-02-01", "2020-02-01",
"2020-02-01", "2020-02-01", "2020-03-01", "2020-03-01", "2020-03-01",
"2020-03-01", "2020-03-01", "2020-03-01"), Responder = c("A",
"B", "B", "C", "C", "D", "E", "B", "F", "F", "F"), Status = c(TRUE,
FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE
), Department = c(1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L)),
class = "data.frame", row.names = c(NA,
-11L))