2016-06-29 2 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 
Смежные вопросы