2016-06-29 26 views
0

我有一個數據框,我想解析「文本」列並創建一個新列,它是從第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

嗯,這是我所做的 - 不知道這是否是最好的方式,但我引用了 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 
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