【问题标题】:Extracting strings with context in R在R中提取带有上下文的字符串
【发布时间】:2021-03-03 19:05:57
【问题描述】:

我正在处理一个包含个人个人历史描述的数据集,我想从这些描述中获取就业数据。特别是,我想知道他们获得第一份工作的年份,并且我知道(由于数据集的性质)这些年份很可能包含在个人描述中,并且几乎可以保证是七十年代。 IdFirst_nameDescription是我们已经得到的变量,我想从可用数据中提取First_job_year

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))

现在,因为我正在寻找七十年代的日期,所以我想尝试识别以“197”开头的字符串,例如:

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

它为每个条目生成一个列表:对于 Chris,我们得到了正确的年份(1973 年),但对于 Adam,我们得到了 1971、1973 和 1975 年的所有三个年份(其中 1975 年是正确的年份),对于鲍勃,我们选错了年份。我认为解决这个问题的一种方法是包含一些上下文,即提取匹配“197”的日期。并提取周围的,比如说,5个词。然后我可以选择上下文包括“工作”或“工作”/“工作”的那些匹配项,例如 - 所以亚当和克里斯会得到正确的年份,鲍勃可能会被分配一个空值(我可以通过和手动编码这些空值)。问题是,我不确定使用什么命令来提取匹配周围的“上下文”。

是否有针对此类问题设计的命令或包?

【问题讨论】:

    标签: r string extract


    【解决方案1】:

    这将让您查看周围的单词。

    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"
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2021-02-03
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多