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