2015-10-19 33 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) 

作品如申請家庭,但希望在括號中的正則表達式只提取的位由()包含。

相關問題