【问题标题】:How to pass the length of each element in an R vector to the substr function?如何将 R 向量中每个元素的长度传递给 substr 函数?
【发布时间】:2020-04-07 18:06:16
【问题描述】:

我有以下向量。

v <- c('X100kmph','X95kmph', 'X90kmph', 'X85kmph', 'X80kmph',
       'X75kmph','X70kmph','X65kmph','X60kmph','X55kmph','X50kmph',
       'X45kmph','X40kmph','X35kmph','X30kmph','X25kmph','X20kmph',
       'X15kmph','X10kmph')

我想提取代表速度的数字。它们都从第 2 个位置开始,但在不同的位置结束,所以我需要 (length of element i) - 4 作为结束位置。

由于length(v) 返回向量的长度而不是每个元素的长度,因此以下内容不起作用。

vnum <- substr(v, 2, length(v)-4)

也试过lengths(),但没用。

如何将每个元素的长度提供给substr

上下文

mytibble <- mytibble %>%
  mutate(Speed = as.numeric(substr(Speed, 2, length(Speed) - 4)))

【问题讨论】:

  • 您需要使用nchar() 而不是length()substr(v, 2, nchar(v)-4).
  • 太棒了。那行得通。谢谢。

标签: r substr


【解决方案1】:

tmfmnk 使用 nchar() 而不是 length() 作为 suggested 可以解决问题!

vnum <- substr(v, 2, nchar(v)-4)

【讨论】:

    【解决方案2】:

    如果你只是想提取数字,那么这里是另一种选择

    vnum <- gsub("\\D","",v)
    

    这样

    > vnum
     [1] "100" "95"  "90"  "85"  "80"  "75"  "70"  "65"  "60"  "55" 
    [11] "50"  "45"  "40"  "35"  "30"  "25"  "20"  "15"  "10" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-07
      • 2012-12-21
      • 2020-09-07
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2019-09-03
      相关资源
      最近更新 更多