如何将case_when生成的new_racecat列保存到现有R数据框?
解决R中dplyr处理后新变量未保存到数据框的问题
核心问题
你当前的管道操作只是生成了包含新变量的临时数据集,但没有将结果赋值回原数据框Racedata,所以原数据框不会自动更新。
解决方法
将管道处理后的结果重新赋值给原数据框(或新数据框),同时可以优化重复的条件判断代码:
# 赋值回原数据框,覆盖原有内容 Racedata <- Racedata %>% separate(col = "Race", into = c("race1", "race2", "race3", "race4", "race5", "race6"), sep = ";") %>% mutate(new_racecat = case_when( # 用if_any简化多列判断,替代重复的或条件 if_any(starts_with("race"), ~ .x == "Native Hawaiian (Including Part-Hawaiian)") ~ "Native Hawaiian", # 补充你的其他种族分类规则,示例如下: if_any(starts_with("race"), ~ .x == "White") ~ "White", if_any(starts_with("race"), ~ .x == "Black or African American") ~ "Black or African American", # 最后添加默认分支,处理未匹配的情况(根据需求调整) TRUE ~ "Other/Multiracial" )) # 若不想保留拆分出的race1-race6临时列,可在末尾添加select语句 # Racedata <- Racedata %>% # separate(...) %>% # mutate(...) %>% # select(-race1:-race6)
优化说明
if_any(starts_with("race"), ~ .x == "目标种族")可以一次性检查所有以race开头的列,避免重复写6个|条件,代码更简洁且不易出错。- 如果不想覆盖原数据框,可将结果赋值给新变量,比如
Racedata_updated <- ...。
内容的提问来源于stack exchange,提问作者Kendra Bean
相关产品推荐
相关产品推荐

