计算 R 中虚拟对象(分组依据)的首次出现次数,然后求和
Count first occurence of a dummy (grouped by) in R and then sum
structure(list(id = c(1L, 1L, 2L, 3L, 3L, 3L, 4L), hire_year = c(2017L,
2017L, 2017L, 2017L, 2016L, 2014L, 2016L), dummy = c(0L, 0L,
1L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
id hire_year dummy
1 1 2017 0
2 1 2017 0
3 2 2017 1
4 3 2017 0
5 3 2016 0
6 3 2014 0
7 4 2016 1
我想计算虚拟值为 0 的行数。但是,我希望每个 ID 只计数一次,即使对于同一个 ID,我可能有不止一行虚拟等于 0。
在这里我希望输出为 [2].
您可以使用 distinct
只保留唯一的行,然后计算 0 的数量。
df %>%
distinct(id, .keep_all = TRUE) %>%
summarise(dummy = sum(dummy == 0))
# dummy
#1 2
length(unique(df$id[df$dummy==0]))
使用过滤器仅查找带零的响应,使用 distinct 仅对每个 id 计数一次并使用 summarize 对值进行计数:
library(tidyverse)
df = bind_cols(id = c(1,1,2,3,3,3,4), hire_year = c(rep(2017, 4), 2016, 2014, 2016), dummy = c(0,0,1,0,0,0,1))
df %>% filter(dummy == 0) %>% distinct(id) %>% summarise(count = n())
structure(list(id = c(1L, 1L, 2L, 3L, 3L, 3L, 4L), hire_year = c(2017L,
2017L, 2017L, 2017L, 2016L, 2014L, 2016L), dummy = c(0L, 0L,
1L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
id hire_year dummy
1 1 2017 0
2 1 2017 0
3 2 2017 1
4 3 2017 0
5 3 2016 0
6 3 2014 0
7 4 2016 1
我想计算虚拟值为 0 的行数。但是,我希望每个 ID 只计数一次,即使对于同一个 ID,我可能有不止一行虚拟等于 0。 在这里我希望输出为 [2].
您可以使用 distinct
只保留唯一的行,然后计算 0 的数量。
df %>%
distinct(id, .keep_all = TRUE) %>%
summarise(dummy = sum(dummy == 0))
# dummy
#1 2
length(unique(df$id[df$dummy==0]))
使用过滤器仅查找带零的响应,使用 distinct 仅对每个 id 计数一次并使用 summarize 对值进行计数:
library(tidyverse)
df = bind_cols(id = c(1,1,2,3,3,3,4), hire_year = c(rep(2017, 4), 2016, 2014, 2016), dummy = c(0,0,1,0,0,0,1))
df %>% filter(dummy == 0) %>% distinct(id) %>% summarise(count = n())