如何在R中访问列表中的可变长度列表
当我在数据帧的一列上调用strsplit()时,根据strsplit()的结果,有时会由于拆分而得到一个或两个“子列表”。比如说,如何在R中访问列表中的可变长度列表,r,R,当我在数据帧的一列上调用strsplit()时,根据strsplit()的结果,有时会由于拆分而得到一个或两个“子列表”。比如说, v <- c("50", "1 h 30 ", "1 h", NA) split <- strsplit(v, "h") [[1]] [1] "50" [[2]] [1] "1" " 30" [[3]] [1] "1 " [[4]] [1] NA v一个常见的习惯用法是lappy(l,[,2),应用到您的示例中,它给出了: > lapp
v <- c("50", "1 h 30 ", "1 h", NA)
split <- strsplit(v, "h")
[[1]]
[1] "50"
[[2]]
[1] "1" " 30"
[[3]]
[1] "1 "
[[4]]
[1] NA
v一个常见的习惯用法是lappy(l,
[,2)
,应用到您的示例中,它给出了:
> lapply(split, `[`, 2)
[[1]]
[1] NA
[[2]]
[1] " 30 "
[[3]]
[1] NA
[[4]]
[1] NA
sapply()
将尽可能将其折叠为向量
现在要做的是lappy()
依次获取拆分的每个组件-这是伪代码的[[i]]
位-并对每个组件提取n
第th元素。我们通过应用[/code>函数和参数n
-在本例中为2L
如果您想要第一个元素,除非有第二个元素,在这种情况下,请使用第二个元素,您可以只编写一个包装器,而不是直接使用[
:
wrapper <- function(x) {
if(length(x) > 1L) {
x[2L]
} else {
x[1L]
}
}
lapply(split, wrapper)
或许
lens <- lengths(split)
out <- lapply(split, `[`, 2L)
ind <- lens == 1L
out[ind] <- lapply(split[ind], `[`, 1L)
out
镜头
> lapply(split, wrapper)
[[1]]
[1] "50"
[[2]]
[1] " 30 "
[[3]]
[1] "1 "
[[4]]
[1] NA
lens <- lengths(split)
out <- lapply(split, `[`, 2L)
ind <- lens == 1L
out[ind] <- lapply(split[ind], `[`, 1L)
out