创建解析文本的新列

时间:2016-06-29 22:21:54

标签: r

我有一个数据框,我想解析“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

谢谢。

2 个答案:

答案 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