Estoy trabajando con un conjunto de datos que contiene descripciones del historial personal de las personas y quiero obtener datos laborales de esas descripciones. En particular, quiero saber el año en que consiguieron su primer trabajo y sé (debido a la naturaleza del conjunto de datos) que es probable que esos años se incluyan en las descripciones personales casi seguro que estará en los años setenta. Id, First_name y Description son las variables que ya tenemos y quiero extraer First_job_year de los datos disponibles:

library(stringr)
dat <- data.frame(Id = c(1,2,3), 
           First_name = c("Adam", "Bob", "Chris"), 
           Description = c("Adam graduated high school in 1971, got married in 1973, and started working at Ford in 1975", 
           "Bob graduated from university in 1972, and a year later started working in the civil service", 
           "Chris dropped out of school in 1969 and was unemployed for a while, but found work in 1973"),
           First_job_year = c(1975, 1972, 1973))

Ahora, como estoy buscando una fecha en los setenta, tuve la idea de intentar identificar cadenas que comenzaran con "197", algo como:

first_job_dates <- str_extract_all(dat$Description, "197.")
first_job_dates
[[1]]
[1] "1971" "1973" "1975"
[[2]]
[1] "1972"
[[3]]
[1] "1973"

Lo que genera una lista para cada entrada: para Chris, tenemos el año correcto (1973), pero para Adam tenemos los tres de 1971, 1973 y 1975 (donde 1975 es el año correcto), y para Bob tenemos el año equivocado. Pensé que una forma de evitar esto sería incluir algo de contexto, es decir, extraer la fecha que coincida con "197". y también extraer los alrededores, digamos, 5 palabras. Luego, podría seleccionar aquellas coincidencias donde el contexto incluye "trabajo" o "trabajo" / "trabajando", por ejemplo, para que Adam y Chris obtengan los años correctos, y Bob podría recibir un valor nulo (y podría pasar codifique estos valores nulos a mano). El problema es que no estoy seguro de qué comando usar para extraer el 'contexto' circundante alrededor de las coincidencias.

¿Existe algún comando o paquete diseñado para este tipo de problema?

1
greggs 3 mar. 2021 a las 22:05

1 respuesta

La mejor respuesta

Esto le permitirá ver las palabras de los alrededores.

str_extract_all(dat$Description, ".{0,15}(197\\d).{0,15}")

[[1]]
[1] "high school in 1971, got married i" "n 1973, and started w"             
[3] "ing at Ford in 1975"               

[[2]]
[1] " university in 1972, and a year la"

[[3]]
[1] " found work in 1973"
0
Stacker 4 mar. 2021 a las 05:39