Как назначить тот же номер идентификатора на основе строкового значения R - PullRequest
2 голосов
/ 25 февраля 2020

У меня есть вектор строк. каждый из них начинается либо с f1_, либо с f2_.

> lst_c<-c("f1_cat", "f2_cat", "f1_dog", "f1_camel", "f2_camel")
> lst_c
[1] "f1_cat"   "f2_cat"   "f1_dog"   "f1_camel" "f2_camel"

. Я хочу просто сравнить все, кроме первых 3 символов (f1_ / f2_), и присвоить им одинаковое значение в случае совпадения

Ожидаемый результат

> df
      name id_f
1   f1_cat    1
2   f2_cat    1
3   f1_dog    2
4 f1_camel    3
5 f2_camel    3

1 Ответ

3 голосов
/ 25 февраля 2020

Вот способ

x <- substring(lst_c, 4, nchar(lst_c))
match(x, unique(x))
# [1] 1 1 2 3 3

nchar(lst_c)

возвращает количество символов для каждого элемента в lst_c. substring(...) удаляет первые 3 символа из этих элементов в lst_c и возвращает

x <- substring(lst_c, 4, nchar(lst_c))
x
# [1] "cat"   "cat"   "dog"   "camel" "camel"

Наконец, мы используем match, чтобы получить "позиции (первых) совпадений его первого аргумента во втором. «

...