使用dplyr合并数据集并按多条件创建新分类列问题咨询
解答
1. NA_character_的定义
R中的缺失值NA是区分数据类型的,NA_character_是字符型专属的缺失值常量,同类的还有整数型的NA_integer_、数值型的NA_real_等。和直接写NA的区别是它强制限定了数据类型,不会出现新列类型不匹配的报错,适合需要提前明确列类型的场景。
2. dplyr实现代码
我们使用dplyr的case_when()函数实现多条件分支,该函数会按从上到下的顺序匹配条件,命中第一个符合的规则后就会停止判断,因此严格按照你给出的条件优先级编写逻辑即可:
# 加载dplyr包 library(dplyr) # 假设你的数据集名为df,执行以下操作 df <- df %>% mutate( # 数值类型的分类列 class_code = case_when( M9 == 1 & M15 == 1 ~ 1, C9 == 1 & C15 == 1 ~ 2, C9 == 0 & C15 == 0 & M9 == 0 & M15 == 0 ~ 3, (C9 == 1 & M15 == 0) | (C9 == 0 & M15 == 1) ~ 4, .default = NA_integer_ ), # 字符类型的分类名称列(不需要可以删除) class_name = case_when( class_code == 1 ~ "Married", class_code == 2 ~ "Cohabiting", class_code == 3 ~ "Non-intact", class_code == 4 ~ "Delete", .default = NA_character_ ) )
注意事项
- 如果你的四个状态变量是字符型存储的
"1"/"0",需要把判断条件里的1、0加上引号,比如改为M9 == "1" - 代码中
.default参数会匹配所有未命中前面规则的行,包括四个变量任意一个为NA的情况,自动填充对应类型的缺失值,符合你的要求。
内容的提问来源于stack exchange,提问作者Tannya Kumar
相关产品推荐
相关产品推荐

