我一直在尝试了解如何更好地处理输出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 以及由此产生的数十个元素,我希望找到一个更通用的解决方案。