R语言如何从dataframe的分号分隔字段提取AD值并新增列
问题分析
你编写的代码存在3处问题:
- 代码中直接使用
X1未指定所属数据框,若环境中无单独的X1变量会直接报错 - 拆分后的单个键值对格式为
AD=xxx,并非完全等于AD=,which(x == "AD=")无法匹配到有效位置 - 即使匹配到对应位置,取出的也是完整的
AD=xxx字符串,还需移除前缀才能得到目标数值
实现方案
方案1:正则提取(最简洁,无需拆分字符串)
base R 实现(无需额外安装包)
Old$X2 <- sub(".*AD=([0-9,]+).*", "\\1", Old$X1)
tidyverse 实现(适合习惯stringr操作的场景)
library(stringr) Old$X2 <- str_extract(Old$X1, "(?<=AD=)[0-9,]+")
方案2:修正你的原有拆分思路
如果你希望继续用按分号拆分的逻辑,修正后的代码如下:
Old$X2 <- mapply( function(x) { # 匹配前缀为AD=的元素 ad_item <- x[grepl("^AD=", x)] # 移除AD=前缀 sub("^AD=", "", ad_item) }, strsplit(Old$X1, ";") )
运行任意方案后,得到的Old数据框即为你需要的结果:
X1 X2 1 AD=17795,54;ARL=139;DEA=20;DER=20;DP=1785 17795,54 2 DP=4784;AD=4753,23;ARL=123;DEA=5;DER=5 4753,23 3 ARL=149;AD=30,9;DEA=25;DER=25;DP=3077 30,9 4 AD=244,49;ARL=144;DEA=7;DER=7;DP=245 244,49
内容的提问来源于stack exchange,提问作者ersan
相关产品推荐
相关产品推荐

