基于R语言data.table实现数值分组生成新分类变量的需求
用data.table生成指定规则的分类变量
给定的data.table数据集:
dt <- data.table(ID = c(1, 2, 3, 4), q1= c(1, NA, NA, 1), q2= c(1, 3, 2, NA), q3= c(2, 1, 4, 4))
需要为q1、q2、q3分别生成对应分类列(q1_cat、q2_cat、q3_cat),规则如下:
- 数值1、2 → "YES"
- 数值3 → "NO"
- 数值4 → "IDK"
- NA值保持不变
实现代码
利用data.table的fcase做条件映射,配合lapply批量处理目标列,高效完成需求:
library(data.table) dt[, paste0(c("q1", "q2", "q3"), "_cat") := lapply(.SD, function(col) { fcase( col %in% c(1, 2), "YES", col == 3, "NO", col == 4, "IDK", default = NA_character_ ) }), .SDcols = c("q1", "q2", "q3")]
最终结果
运行代码后查看数据集:
print(dt)
输出与预期一致:
ID q1 q2 q3 q1_cat q2_cat q3_cat 1: 1 1 1 2 YES YES YES 2: 2 NA 3 1 NA NO YES 3: 3 NA 2 4 NA YES IDK 4: 4 1 NA 4 YES NA IDK
内容的提问来源于stack exchange,提问作者Hellihansen
相关产品推荐
相关产品推荐

