如何在R中检测数值变量是否含指定数字并生成二分类变量
问题:检测数值变量中是否存在特定数字并生成标记变量
已知如何用gsub或grep提取数值变量的首尾数字,但需要实现:检测数值变量的任意位置是否存在特定数字(例如数字3),并生成新变量——存在则标记为1,不存在则标记为0。
示例输入数据框
have <- as.data.frame(structure(list(Q14=structure(c(13, 3, 788, 134, 56, 3214, 1036 )))))
期望输出数据框(新增Q14_3列)
want <- as.data.frame(structure(list(Q14=structure(c(13, 3, 788, 134, 56, 3214, 1036 )), Q14_3=structure(c(1, 1, 0, 1, 0, 1, 1)))))
解决方案
方法1:基础R实现(grepl函数)
使用grepl函数检测字符串中是否包含目标字符,再将逻辑结果转换为整数(TRUE转1,FALSE转0),代码简洁高效:
# 生成标记变量 have$Q14_3 <- as.integer(grepl("3", have$Q14))
方法2:使用stringr包(更直观的字符串操作)
如果你习惯用tidyverse生态的工具,stringr包的str_detect函数语义更清晰:
library(stringr) # 生成标记变量 have$Q14_3 <- as.integer(str_detect(have$Q14, "3"))
验证结果
执行上述代码后,可通过以下代码确认结果与预期一致:
all.equal(have, want) # 输出:TRUE
内容的提问来源于stack exchange,提问作者EtoiledeMoyenOrient
相关产品推荐
相关产品推荐

