【问题标题】:Splitting a string at different indexes in R在R中的不同索引处拆分字符串
【发布时间】:2015-10-19 23:16:10
【问题描述】:

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

例如我有一个向量

"               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]",data) 得到了

[[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 返回相同的字符串。

【问题讨论】:

  • 我试图使用来自grepexpr 的结果作为分割文本的索引
  • 如此分割空白? strsplit(string, '\\s+') 喜欢in this question

标签: r string


【解决方案1】:

在cmets中已经提到你可以使用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"

【讨论】:

    【解决方案2】:

    可能有点矫枉过正,但我​​喜欢来自gsubfnstrapplyc

    对于你的问题,你做

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

    与 apply 系列类似,但在括号中查找正则表达式并仅提取 () 括起来的位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      相关资源
      最近更新 更多