Как передать длину каждого элемента вектора R в функцию substr? - PullRequest
1 голос
/ 07 апреля 2020

У меня есть следующий вектор.

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?

Контекст :

v фактически представляет столбец символов (называемый Speed) в таблице, которую я пытаюсь преобразовать в соответствующую цифру c столбец.

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

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Использование nchar() вместо length(), как , предложенное tmfmnk , добивается цели!

vnum <- substr(v, 2, nchar(v)-4)
0 голосов
/ 07 апреля 2020

Если вы просто хотите извлечь цифры, то здесь есть еще один вариант

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" 
...