从R中的数字和字母列表中分离多个数字

时间:2017-02-28 05:01:35

标签: r regex text

我有一个类似于:

的列表
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。感谢。

2 个答案:

答案 0 :(得分:3)

对于每个字符串的多个匹配项,请尝试:

regmatches(x, gregexpr("\\d+(?= (chair|book))", x, perl=TRUE))
#[[1]]
#[1] "2"
#
#[[2]]
#[1] "1" "4"
#
#[[3]]
#[1] "4" "3"
#
#[[4]]
#character(0)
#
#[[5]]
#[1] "1"

我想str_extract或表兄弟会做类似的工作。

答案 1 :(得分:2)

我们可以使用str_extract

str_extract_all(list, "[0-9](?=\\s*(books|chair[s]*))")
#[[1]]
#[1] "2"

#[[2]]
#[1] "1" "4"

#[[3]]
#[1] "4" "3"

#[[4]]
#[1] NA

#[[5]]
#[1] "1"