R:从嵌套列表元素中提取前两位数字

时间:2017-10-09 23:05:19

标签: r substring strsplit

对于下面的向量,我只保留每个整数的前两位数字:

a <- c('1234 2345 345 234', '323 55432 443', '43 23345 321')

我尝试通过使用strsplit将矢量转换为嵌套列表,然后将substr应用于列表来尝试这样做:

a <- strsplit(a, ' ')
a <- substr(a, start = 1, stop = 2)

然而,这似乎只是提取串联命令的开头:

a
[1] "c(" "c(" "c("

理想情况下,我可以将矢量强制转换为以下形式:

[[1]]
[1] "12" "23" "34" "23"

[[2]]
[1] "32" "55" "44"

[[3]]
[1] "43" "23" "32"

2 个答案:

答案 0 :(得分:3)

怎么样

lapply(strsplit(a, " "), substr, 1, 2)

这明确对lapply的结果进行了strsplit。这是因为substr()首先尝试将您的列表强制转换为字符向量(它不会期望列表作为它的第一个参数)。如果你这样做,你可以看到它在看什么

as.character(strsplit(a, ' '))
# [1] "c(\"1234\", \"2345\", \"345\", \"234\")" "c(\"323\", \"55432\", \"443\")"         
# [3] "c(\"43\", \"23345\", \"321\")"  

答案 1 :(得分:0)

我们还可以从单词边界提取前两位数字

library(stringr)
str_extract_all(a, "\\b\\d{2}")
#[[1]]
#[1] "12" "23" "34" "23"

#[[2]]
#[1] "32" "55" "44"

#[[3]]
#[1] "43" "23" "32"