在 group_by 内添加一个因子水平的计数
Add count of one factor level within group_by
我正在进行一项调查数据分析,我对一个家庭进行了多次观察,并且我有家庭和个人层面的变量。我现在想将个人层面的特征转化为家庭层面的特征,例如一个家庭中有多少就业人员。
最小 Reprex:
library(tidyverse)
df <- tibble( "id" = c(1,1,2,2,3,3,3),
"status"= as.factor(c("employed", "employed", "unemployed", "unemployed", "employed", "unemployed", "other")))
df %>%
group_by(id) %>%
add_count(status, name = "count_types")
上面的代码产生了我想要的一半。我想进一步创建一个变量来指示 status = employed 的人数,并将其分配给同一 ID 内的 all。我尝试了一个 case_when 链,但它为第 2 组生成了 NA 而不是 0,其中没有“受雇”个人,并且只有在受雇存在并且每个组中的第一行时才有效。
感谢您的建议,最好是 tidyverse 风格。
您只需要比较 status
是否等于“employed”并对逻辑向量求和:
df %>%
group_by(id) %>%
add_count(status, name = "count_types") %>%
mutate(n_employed = sum(status == "employed"))
我正在进行一项调查数据分析,我对一个家庭进行了多次观察,并且我有家庭和个人层面的变量。我现在想将个人层面的特征转化为家庭层面的特征,例如一个家庭中有多少就业人员。
最小 Reprex:
library(tidyverse)
df <- tibble( "id" = c(1,1,2,2,3,3,3),
"status"= as.factor(c("employed", "employed", "unemployed", "unemployed", "employed", "unemployed", "other")))
df %>%
group_by(id) %>%
add_count(status, name = "count_types")
上面的代码产生了我想要的一半。我想进一步创建一个变量来指示 status = employed 的人数,并将其分配给同一 ID 内的 all。我尝试了一个 case_when 链,但它为第 2 组生成了 NA 而不是 0,其中没有“受雇”个人,并且只有在受雇存在并且每个组中的第一行时才有效。
感谢您的建议,最好是 tidyverse 风格。
您只需要比较 status
是否等于“employed”并对逻辑向量求和:
df %>%
group_by(id) %>%
add_count(status, name = "count_types") %>%
mutate(n_employed = sum(status == "employed"))