在R中使用gsub处理dataframe列字符串,删除多余符号保留指定内容
你可以使用gsub结合正则捕获组一步完成需求,代码如下:
df$Regression <- gsub("`([^`]+)`~`([^`]+)`\\..*", "\\1 ~ \\2", df$Regression)
正则逻辑说明
- 用
([^]+)匹配被反引号包裹的变量名,两组括号分别捕获TLC和7_A`两个变量名 \\..*匹配英文句号及句号之后的所有内容,这部分在替换时直接丢弃- 替换格式
\\1 ~ \\2就是把两个捕获到的变量名用左右带空格的波浪号拼接,正好符合你需要的TLC ~ 7_A格式。
执行后查看处理结果:
head(df) Real Predicted PdivR Regression 1 7.76 7.36 0.95 TLC ~ 7_A 2 5.55 5.28 0.95 TLC ~ 7_A 3 4.80 5.12 1.07 TLC ~ 7_A 4 4.68 4.47 0.96 TLC ~ 7_A 5 7.43 7.48 1.01 TLC ~ 7_A 6 4.59 4.69 1.02 TLC ~ 7_A
如果对复杂正则不熟悉,也可以用分步写法降低理解成本:
# 第一步:删除所有反引号 df$Regression <- gsub("`", "", df$Regression) # 第二步:删除点及后续所有内容 df$Regression <- gsub("\\..*", "", df$Regression) # 第三步:给波浪号左右加空格 df$Regression <- gsub("~", " ~ ", df$Regression)
两种写法最终效果完全一致。
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

