R语言中:判断变量值为纯数字/含数字的标记实现方案
解决R数据框的两个标记列需求
没问题,这两个需求都可以通过R的正则表达式工具轻松实现,我结合示例一步步给你说明:
第一步:先创建示例数据框
咱们先把你给出的示例数据构建出来,注意state是factor类型:
# 创建示例数据框 df <- data.frame( ID = 1:4, state = factor(c("123fg^>", "fhgfh@", "125@!", "125")), stringsAsFactors = FALSE # 确保其他列类型正确,state单独设为factor )
需求1:标记纯数字行(纯数字→0,其他→1)
因为state是factor类型,咱们得先把它转成字符型再做正则匹配——不然直接匹配会拿到factor底层的整数编码,不是显示的文本。用grepl()匹配纯数字的正则表达式^\\d+$(^表示行开头,\\d+表示一个或多个数字,$表示行结尾),再用ifelse()生成标记列:
# 添加Flag列 df$Flag <- ifelse(grepl("^\\d+$", as.character(df$state)), 0, 1)
运行后数据框会变成你期望的样子:
ID state Flag 1 1 123fg^> 1 2 2 fhgfh@ 1 3 3 125@! 1 4 4 125 0
需求2:标记包含数字的行(含数字→1,否则→0)
同样先把state转成字符型,用正则\\d匹配任意单个数字,只要单元格里有至少一个数字就会返回TRUE,再用as.integer()把逻辑值转成1/0(或者继续用ifelse()也可以):
# 添加Flag2列(你可以自定义列名) df$Flag2 <- as.integer(grepl("\\d", as.character(df$state)))
对应示例数据的结果是:
ID state Flag Flag2 1 1 123fg^> 1 1 2 2 fhgfh@ 1 0 3 3 125@! 1 1 4 4 125 0 1
小细节提醒
- 一定要转字符型:factor的存储逻辑是整数编码+标签,直接匹配正则会拿到编码值,完全不符合咱们的需求,所以
as.character()这步不能省。 - 正则含义再捋一遍:
^\\d+$:严格匹配从开头到结尾全是数字的内容,确保是纯数字单元格。\\d:只要单元格里存在任意一个数字,就会被标记为1。
内容的提问来源于stack exchange,提问作者sahboor
相关产品推荐
相关产品推荐

