【发布时间】:2017-02-28 05:01:34
【问题描述】:
我有一个看起来像这样的列表:
list <- c("2 chairs.", "1 chair & 4 books.",
"Sitting on 1 couch. Another 4 chairs & 3 books.",
NA, "1 chair.",
"3 books")
我的列表实际上有 10k+ 长,但是这个简短的列表包含了所有的变化。我只需要提取椅子之前的数字和书籍之前的数字。我更喜欢最终得到一个列表列表,其中一些列表将包含两个数字,一些列表将包含一个数字,而一些列表将只有 NA。
我尝试了gsub() 和strsplit() 以各种方式获得我想要的最终结果,但没有运气。
编辑:也许我应该在上面的问题中更具体。我需要结果是数字而不是数字作为字符串。我也希望将 NA 值保持为 NA。谢谢。
【问题讨论】:
-
对每个字符串的多个匹配项不稳健,但在其他方面可行:
sapply(c('chair', 'book'), function(x){as.integer(gsub(paste0('.*(\\d+) ', x, '.*'), '\\1', list))})