微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

如果其他列中有特定值,我正在使用的项目需要我按日期(每季度)计算频率。 数据如下所示:

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<-My_Data%>%group_by(Date)%>%summarise(frequency=n()) 但我很难找到类似的东西,但对于选择值。

帮助将不胜感激。谢谢!

样本数据:

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

解决方法

为什么不简单呢?

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

或在 BaseR 中

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
,

这对你有用吗?

Result<-My_Data%>%group_by(Grade,Date)%>%summarise(frequency=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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。