如何用R的tidyr::separate按算术/比较运算符拆分数据列?
解决R语言拆分数据框labels列的问题
你需要的正则表达式是([<>+-]),同时需要补充空值替换步骤(separate拆分后空内容会生成空字符串,而目标是NA_character_),完整代码如下:
library(dplyr) library(tidyr) pre = data.frame(labels = c("<0", "0-2", "3-3", "4-5", "6+")) pre %>% separate(col = labels, into = c("LHS", "RHS"), sep = "([<>+-])", # 匹配<、>、+、-这类运算符作为拆分分隔符 remove = FALSE, # 保留原labels列 fill = "right") %>% # 处理运算符在末尾的情况,右侧补空字符串 mutate(across(c(LHS, RHS), ~na_if(., ""))) -> post # 将空字符串转为NA # 查看结果 post
关键说明:
- 正则
([<>+-])精准匹配需要拆分的算术/比较运算符,作为拆分依据; fill = "right"确保像6+这种运算符在末尾的内容拆分后,右侧位置能得到空字符串,方便后续转为NA;na_if(., "")将拆分产生的空字符串替换为目标要求的NA_character_。
运行后生成的post数据与你给出的目标数据完全一致。
内容的提问来源于stack exchange,提问作者Araph7
相关产品推荐
相关产品推荐

