R 如果其他列包含特定值,则日期的频率计数

R 如果其他列包含特定值,则日期的频率计数,r,dplyr,group-by,frequency,zoo,R,Dplyr,Group By,Frequency,Zoo,与我合作的项目需要我按日期(每季度)统计频率,如果其他列中有特定值。 数据如下所示: ID Date Grade 1 2016-Q2 A 2 2016-Q2 A 3 2016-Q3 B 4 2016-Q3 D 5 2016-Q4 D 6 2017-Q1 B 7 2017-Q1 A 8 2017-Q1 B 9 2017-Q1 C 我试图统计每个季度发生的A和B的频率。如果A或B在该季度没有出现,则返回0。 我愿意看到的结果是: Da

与我合作的项目需要我按日期(每季度)统计频率,如果其他列中有特定值。 数据如下所示:

ID  Date     Grade
1   2016-Q2  A
2   2016-Q2  A
3   2016-Q3  B
4   2016-Q3  D
5   2016-Q4  D
6   2017-Q1  B
7   2017-Q1  A
8   2017-Q1  B
9   2017-Q1  C
我试图统计每个季度发生的A和B的频率。如果A或B在该季度没有出现,则返回0。 我愿意看到的结果是:

Date     frequency
2016-Q2  2
2016-Q3  1
2016-Q4  0
2017-Q1  3
我知道代码部分
Result%group\u by(Date)%%>%summary(frequency=n())
但我真的很难找到类似的东西,但选择的值

非常感谢您的帮助。谢谢

样本数据:

df <- tribble(
  ~Date,     ~Grade,
   "2016-Q2",  "A",
   "2016-Q2",  "A",
   "2016-Q3",  "B",
   "2016-Q3",  "D",
   "2016-Q4",  "D",
   "2017-Q1",  "B",
   "2017-Q1",  "A",
   "2017-Q1",  "B",
   "2017-Q1",  "C"
)

df这对你有用吗

Result<-My_Data%>%group_by(Grade, Date)%>%summarise(frequency=n())

Result%group\u by(年级、日期)%%>%summary(频率=n())

我相信还有一种更简单的方法可以实现这一点。但是,这仍然有效:

library(dplyr)
library(purrr)

df %>%
  rowwise() %>%
  mutate(map_dfc(list(sum_A = "A", 
                      sum_B = "B"), ~ sum(cur_data() == .x))) %>%
  group_by(Date) %>%
  summarise(across(starts_with("sum"), sum), 
            count_A_B = sum(c_across(sum_A:sum_B))) %>%
  select(-c(sum_A, sum_B))

# A tibble: 4 x 2
  Date    count_A_B
  <chr>       <int>
1 2016-Q2         2
2 2016-Q3         1
3 2016-Q4         0
4 2017-Q1         3

库(dplyr)
图书馆(purrr)
df%>%
行()
变异(映射)dfc(列表(sum_A=“A”,
sum_B=“B”),~sum(cur_data()==.x))%>%
分组单位(日期)%>%
总结(跨越(以“总和”开头)、总和),
count_A_B=总和(c_穿过(sum_A:sum_B)))%>%
选择(-c(总和A,总和B))
#一个tibble:4x2
日期计数
1 2016-2季度2
2016年第2季度至第3季度1
2016年第3季度至第4季度0
2017年第4季度至第3季度
为什么不简单地说呢

library(dplyr)
df %>% group_by(Date) %>%
  summarise(freq = sum(Grade %in% c("A", "B")))

# A tibble: 4 x 2
  Date     freq
  <chr>   <int>
1 2016-Q2     2
2 2016-Q3     1
3 2016-Q4     0
4 2017-Q1     3

谢谢第一个非常有效,很高兴它起了作用。请按照惯例接受答案。您只能接受一个答案,但是,您可以在每个问题上选择您认为有帮助的答案。@AnilGoyal我不知道为什么我把这个问题复杂化了!也许昨天不是我的日子!
aggregate(Grade ~ Date, data = df,  FUN = function(x) sum(x %in% c("A", "B")))

     Date Grade
1 2016-Q2     2
2 2016-Q3     1
3 2016-Q4     0
4 2017-Q1     3