我有一个数据框,我想解析“text”列并创建一个新列,该列是从第4个位置开始并在第1个下划线之前结束的数字。该数字将是1或2位数。这是一个例子:
d = data.frame(group = c("A","b","C"),text =c("DDD10_sdfdsdsfads_","ggg8_dsfsd_","hhh1_dsfdsaf_dsafdafd"))
d
请参阅下面的新列,我想创建
group text NEW COLUMN ??
1 A DDD10_sdfdsdsfads_ 10
2 b ggg8_dsfsd_ 8
3 C hhh1_dsfdsaf_dsafdafd 1
谢谢。
答案 0 :(得分:2)
嗯,这就是我所做的 - 不确定这是不是最好的方式,但我引用了 Extracting unique numbers from string in R 并且努力了。
d = data.frame(group = c("A","b","C"),text =c("DDD10_sdfdsdsfads_","ggg8_dsfsd_","hhh1_dsfdsaf_dsafdafd"))
d$newColumn <- gsub('[^0-9]', '', d$text)
> d
group text newColumn
1 A DDD10_sdfdsdsfads_ 10
2 b ggg8_dsfsd_ 8
3 C hhh1_dsfdsaf_dsafdafd 1
答案 1 :(得分:0)
由于已知起始位置和结束位置,我们可以使用substr
进行提取,然后移除_
d$newColumn <- as.numeric(sub("_", "", substr(d$text, 4, 5)))
d$newColumn
#[1] 10 8 1
或仅使用sub
as.numeric(sub("^.{3}(.{1,2})_.*", "\\1", d$text))
#[1] 10 8 1