2015-10-19 67 views
1

我有一个字符串,其索引有空格后跟数字。我想用这些索引来拆分它们之间的字符串。在R中的不同索引处拆分字符串

例如我有一个矢量

"    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

我试图使用'grepexpr'的结果作为索引来拆分文本 – Sharl

+1

,以便在空白处分割? 'strsplit(string,'\\ s +')'就像[在这个问题](http://stackoverflow.com/questions/16273766/split-string-into-substrings-on-one-or-more-whitespaces) – rawr

回答

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 

而且你可以通过使用quiet = TRUE离开了Read 27 items消息。

这里使用scan()的一个优点是,如果您使用的是strsplit(),则在结果开始处不会得到空字符串。

strsplit(x, "\\s+")[[1]][1:3] 
# [1] "" "4" "1" 
1

可能是矫枉过正,但我​​喜欢strapplycgsubfn

对于你的问题,你做

strapplyc(x, " ([0-9]+)", simplify = T) 

作品如申请家庭,但希望在括号中的正则表达式只提取的位由()包含。