Как использовать lapply при вычитании подсписка и использовать функцию str_extract

Я хочу извлечь годы из текста.

Следующий код дает мне вектор со значениями 1998 и 2009 годов.

description= "I was teaching at the univeristy from 1998 to 2009"
teaching = as.numeric(str_extract_all(description ,"\\d{4}")[[1]])

Тогда я хочу вычесть годы

teaching[2] - teaching[1] 
[1] 11

Но проблема в том, что у меня есть столбец в фрейме данных с этими текстами, и я хочу извлечь годы из каждого текста и вычесть их.

Я пытался это сделать, но запутался

аа = lapply(df$description, str_extract_all,"\\d{4}")
bb = lapply(aa, function(x) x[1])
2
0
298
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете попробовать это:

# example data

df <- data.frame(description = paste("I was teaching at the univeristy from",1990:1995, "to",seq(2010,2020,by =2)))

#  description
#1 I was teaching at the univeristy from 1990 to 2010
#2 I was teaching at the univeristy from 1991 to 2012
#3 I was teaching at the univeristy from 1992 to 2014
#4 I was teaching at the univeristy from 1993 to 2016
#5 I was teaching at the univeristy from 1994 to 2018
#6 I was teaching at the univeristy from 1995 to 2020

years <- str_extract_all(df$description, "\\d{4}")
sapply(years, function(x) diff(as.numeric(x)))
# 20 21 22 23 24 25

Альтернативный подход к борьбе с НП:

# example data 
df <- data.frame(description = c(paste("I was teaching at the univeristy from",1990:1995, "to",seq(2010,2020,by =2)), "I was not teaching at all"))

years <- str_extract_all(df$description, "\\d{4}", simplify = TRUE)
apply(years, 1, function(x) diff(as.numeric(x)))
# 20 21 22 23 24 25 NA

Спасибо! Это сработало отлично. Как сохранить NA, если в строке нет шаблона?

nurma_a 10.08.2018 16:47

Рад, что помог! Я отредактировал ответ вторым подходом, который сохраняет информацию АН.

Daniel 10.08.2018 17:23

Спасибо. Я не знал о "упрощении" в функции str_extract

nurma_a 13.08.2018 10:11

Другие вопросы по теме