2016-08-10 3 views
0

У меня есть текстовые строки, из которых я хотел бы извлечь определенные биты информации. В частности, я хотел бы получить рейтинг из 10 из.R regex extract rating из 10 из строки

Я хотел бы помочь в построении функции func_to_extract_rating, что делает следующее ...

text_string_vec <- c('blah$2.94 blah blah 3/10 blah blah.', 
        'foo foo 8/10.', 
        '10/10 bar bar21/09/2010 bar bar', 
        'jdsfs1/10djflks5/10.') 

func_to_extract_rating <- function(){} 

output <- lapply(text_string_vec,func_to_extract_rating) 
output 
[[1]] 
[1] 3 10 

[[2]] 
[1] 8 10 

[[3]] 
[1] 10 10 

[[4]] 
[[4]][[1]] 
[1] 1 10 

[[4]][[2]] 
[1] 5 10 
+0

'у <- regmatches (text_string_vec, gregexpr ('\\ D +/10', text_string_vec)); rapply (y, strsplit, split = '/', how = 'list') ' – rawr

ответ

3

Что-то вроде этого, может быть:

library(stringr) 

result = str_extract_all(text_string_vec, "[0-9]{1,2}/10") 
result = lapply(result, function(x) gsub("/"," ", x)) 

[[1]] 
[1] "3 10" 

[[2]] 
[1] "8 10" 

[[3]] 
[1] "10 10" 

[[4]] 
[1] "1 10" "5 10" 

Но так как это всегда из 10, если вы просто хотите числовой рейтинг, вы можете сделать:

result = str_extract_all(text_string_vec, "[0-9]{1,2}/10") 
result = lapply(result, function(x) as.numeric(gsub("/10","", x))) 
1

Вот base R вариант

lapply(strsplit(str1, "([0-9]{1,2}\\/10)(*SKIP)(*FAIL)|.", perl = TRUE), 
     function(x) { 
     lst <- lapply(strsplit(x[nzchar(x)], "/"), as.numeric) 
     if(length(lst)==1) unlist(lst) else lst}) 
#[[1]] 
#[1] 3 10 

#[[2]] 
#[1] 8 10 

#[[3]] 
#[1] 10 10 

#[[4]] 
#[[4]][[1]] 
#[1] 1 10 

#[[4]][[2]] 
#[1] 5 10 
Смежные вопросы