R语言如何判断dataframe指定列是否存在7-18区间的数值并生成新标记列
R 实现DataFrame新增区间判断标记列
实现思路
将values列的逗号分隔字符串拆分为独立数值,逐一判断是否落在7~18闭区间内,只要存在符合条件的值标记为1,否则为0。
方法1:Base R 实现
# 自定义区间判断函数 check_val <- function(val_str) { num_vec <- as.numeric(unlist(strsplit(val_str, ","))) # 存在符合区间的数值返回1,否则返回0 as.integer(any(num_vec >= 7 & num_vec <= 18, na.rm = TRUE)) } # 批量应用到values列,生成flag标记列 df$flag <- sapply(df$values, check_val)
方法2:Tidyverse 风格实现
library(dplyr) library(purrr) df <- df %>% mutate(flag = map_int(values, ~{ num_vec <- as.numeric(unlist(strsplit(.x, ","))) as.integer(any(num_vec >= 7 & num_vec <= 18, na.rm = TRUE)) }))
输出结果验证
处理后得到的df如下:
| KEYCODE | values | flag |
|---|---|---|
| A | 12,3 | 1 |
| B | 2 | 0 |
| C | 2,7 | 1 |
| D | 16 | 1 |
注意事项
any()中添加na.rm = TRUE是为了避免values列存在非数字字符时,as.numeric转成NA导致判断结果异常,不需要可以删除该参数。
内容的提问来源于stack exchange,提问作者mraveek
相关产品推荐
相关产品推荐

