如何解决如果其他列包含特定值,则日期的频率计数
如果其他列中有特定值,我正在使用的项目需要我按日期(每季度)计算频率。 数据如下所示:
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 举报,一经查实,本站将立刻删除。