用例何时评估跨列的变量并分配存储桶
Using case when to evaluate variables across columns and assign buckets
我有一个数据集,其中 race/ethnicity 个变量分布在多个列中 - 个人可以 select 多个类别,但我想将属于某个类别的人分组。
例如,如果某人 select 分为两个类别,东南亚和南亚,新类别会将此人标记为 'asian.' 同样,如果他们选择古巴和墨西哥,我会标记他们 'hispanic/latino.' 但是,如果有人选择东南亚和古巴,我想将他们标记为多种族。我有 20 多个个人可以做出的选择,我想将它们组合成更大的类别:亚洲人、黑人、白人、hispanic/latino 等
data <- data.frame(race_se_asian = c(0,1,1,0,0,0,1,0,0,0,0),
race_south_asian = c(0,l,0,0,1,0,1,0,0,0),
race_european = c(1,0,1,0,0,0,0,0,0,0),
race_cuban = c(1,0,1,0,0,0,0,0,0,0),
race_mexican = c(1,0,1,0,0,0,0,0,0,0))
我还创建了一个 'total categories' 列来计算每个人制造的 select 离子数。
有没有使用 case_when 或 for 循环的简单方法?
这里有一个有辅助功能的方法
library(dplyr)
fun <- function(x, groups){
i <- which(x == 1)
if(length(i)){
g <- groups[i, "groups"]
g <- unique(g)
if(length(g) == 1) g else "multiracial"
} else NA_character_
}
groups <- c("asian", "asian", "european", "hispanic/latino", "hispanic/latino")
groups <- data.frame(ethnicity = names(data), groups)
data %>%
rowwise() %>%
mutate(category = fun(c_across(everything()), groups))
我有一个数据集,其中 race/ethnicity 个变量分布在多个列中 - 个人可以 select 多个类别,但我想将属于某个类别的人分组。
例如,如果某人 select 分为两个类别,东南亚和南亚,新类别会将此人标记为 'asian.' 同样,如果他们选择古巴和墨西哥,我会标记他们 'hispanic/latino.' 但是,如果有人选择东南亚和古巴,我想将他们标记为多种族。我有 20 多个个人可以做出的选择,我想将它们组合成更大的类别:亚洲人、黑人、白人、hispanic/latino 等
data <- data.frame(race_se_asian = c(0,1,1,0,0,0,1,0,0,0,0),
race_south_asian = c(0,l,0,0,1,0,1,0,0,0),
race_european = c(1,0,1,0,0,0,0,0,0,0),
race_cuban = c(1,0,1,0,0,0,0,0,0,0),
race_mexican = c(1,0,1,0,0,0,0,0,0,0))
我还创建了一个 'total categories' 列来计算每个人制造的 select 离子数。
有没有使用 case_when 或 for 循环的简单方法?
这里有一个有辅助功能的方法
library(dplyr)
fun <- function(x, groups){
i <- which(x == 1)
if(length(i)){
g <- groups[i, "groups"]
g <- unique(g)
if(length(g) == 1) g else "multiracial"
} else NA_character_
}
groups <- c("asian", "asian", "european", "hispanic/latino", "hispanic/latino")
groups <- data.frame(ethnicity = names(data), groups)
data %>%
rowwise() %>%
mutate(category = fun(c_across(everything()), groups))