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

R: Extract first two digits from nested list elements

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

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"

怎么样

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

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

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

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

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"