我有一个不同索引的字符串,其中有空格后跟数字。我想使用这些索引在它们之间拆分字符串。
例如我有一个向量
" 4 1 138 138 138 138 140 140 140 140 140 141 142 144 144 145 145 146 145 145 145 145 145 139 135 133 3391"
并希望将其拆分为
[1]"4" "1 " "138" "138" "138" "138" "140" "140" "140" "140" "140" "141" "142" "144"
[15]"144" "145" "145" "146" "145" "145" "145" "145" "145" "139" "135" "133 ""3391"
我使用了grepexpr(“[1-9]”,数据)并获得了
[[1]]
[1] 15 17 21 26 31 36 41 46 51 56 61 66 71 76 81 86
[17] 91 96 101 106 111 116 121 126 131 136 142
attr(,"match.length")
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
attr(,"useBytes")
[1] TRUE
我试过使用strsplit和substr但到目前为止还没有任何工作。 使用substr时出现整数错误,然后strsplit返回相同的字符串。
答案 0 :(得分:4)
评论中提到您可以使用strsplit()
。另一个在此字符串上运行良好的选项是scan()
。
x <- " 4 1 138 138 138 138 140 140 140 140 140 141 142 144 144 145 145 146 145 145 145 145 145 139 135 133 3391"
scan(text = x, what = "")
# Read 27 items
# [1] "4" "1" "138" "138" "138" "138" "140" "140" "140" "140"
# [11] "140" "141" "142" "144" "144" "145" "145" "146" "145" "145"
# [21] "145" "145" "145" "139" "135" "133" "3391"
以上为我们提供了字符结果,如您所示,您的问题需要。我们也可以通过省略what
参数或将其更改为integer()
(取决于输入)来返回数值结果。
scan(text = x)
# Read 27 items
# [1] 4 1 138 138 138 138 140 140 140 140 140 141 142 144
# [15] 144 145 145 146 145 145 145 145 145 139 135 133 3391
您可以使用Read 27 items
忽略quiet = TRUE
消息。
在这里使用scan()
的一个好处是,你不会像在使用strsplit()
时那样在结果的开头获得一个空字符串。
strsplit(x, "\\s+")[[1]][1:3]
# [1] "" "4" "1"
答案 1 :(得分:1)
可能有点矫枉过正,但我喜欢strapplyc
gsubfn
对于您的问题,您可以
strapplyc(x, " ([0-9]+)", simplify = T)
与apply系列类似,但在括号中查找正则表达式并仅提取()
所包含的位。