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