【发布时间】:2014-09-01 15:18:47
【问题描述】:
我一直试图了解如何更好地处理strsplit 的输出。我经常有这样的数据想要拆分:
mydata <- c("144/4/5", "154/2", "146/3/5", "142", "143/4", "DNB", "90")
#[1] "144/4/5" "154/2" "146/3/5" "142" "143/4" "DNB" "90"
拆分后的结果如下:
strsplit(mydata, "/")
#[[1]]
#[1] "144" "4" "5"
#[[2]]
#[1] "154" "2"
#[[3]]
#[1] "146" "3" "5"
#[[4]]
#[1] "142"
#[[5]]
#[1] "143" "4"
#[[6]]
#[1] "DNB"
#[[7]]
#[1] "90"
我从 strsplit 帮助指南中知道不会生成最终的空字符串。因此,根据要拆分的“/”的数量,我的每个结果中都会有 1、2 或 3 个元素
获取第一个元素非常简单:
sapply(strsplit(mydata, "/"), "[[", 1)
#[1] "144" "154" "146" "142" "143" "DNB" "90"
但是当每个结果中存在这些不相等数量的元素时,我不确定如何获得第二个、第三个...。
sapply(strsplit(mydata, "/"), "[[", 2)
# Error in FUN(X[[4L]], ...) : subscript out of bounds
我希望从一个可行的解决方案中返回,如下:
#[1] "4" "2" "3" "NA" "4" "NA" "NA"
这是一个相对较小的例子。我可以很容易地对这些数据执行一些 for 循环,但是对于具有 1000 次观察的真实数据来运行 strsplit 以及由此产生的数十个元素,我希望找到一个更通用的解决方案。
【问题讨论】:
-
使用
[而不是[[似乎有效 -
@alexis_laz 您应该将此作为答案。我在
help("[")中找不到这个。