如果其他列包含特定值,则日期的频率计数
frequency count of dates if other column contains specific values
如果其他列中有特定值,我正在处理的项目需要我按日期(每季度)计算频率。
数据如下所示:
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 在该季度未发生,则 returns 0。
我愿意看到的输出是:
Date frequency
2016-Q2 2
2016-Q3 1
2016-Q4 0
2017-Q1 3
我知道代码部分Result<-My_Data%>%group_by(Date)%>%summarise(frequency=n())
但我很难找到类似的东西,但 select 值。
非常感谢您的帮助。谢谢!
示例数据:
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"
)
这对你有用吗?
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
为什么不简单呢?
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
如果其他列中有特定值,我正在处理的项目需要我按日期(每季度)计算频率。 数据如下所示:
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 在该季度未发生,则 returns 0。 我愿意看到的输出是:
Date frequency
2016-Q2 2
2016-Q3 1
2016-Q4 0
2017-Q1 3
我知道代码部分Result<-My_Data%>%group_by(Date)%>%summarise(frequency=n())
但我很难找到类似的东西,但 select 值。
非常感谢您的帮助。谢谢!
示例数据:
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"
)
这对你有用吗?
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
为什么不简单呢?
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