对于下面的向量,我只保留每个整数的前两位数字:
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"
答案 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"