Замените каждый экземпляр нескольких значений в векторе значением, определенным для уникального значения - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть вектор

a <- c(2, 1, 1, 2)

, и я хочу заменить каждое уникальное значение другим уникальным значением.Например, я хочу, чтобы 2 -> 'a' и 1 -> 'b' создали вектор с таким же порядком, как этот:

c <- c('a', 'b', 'b', 'a')

Я пробовал кое-что вот так, но это не сработало:

replace(a, a %in% unique(a), b)

Я хочу избегать ручного перехода ко всем уникальным значениям для обобщения в случае, если a велико.Строки замены - только примеры.Решение также должно обобщаться на совершенно разные строки или значения.Например: 2 -> «Уолтер» и 1 -> «Гетруда».

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Мы можем использовать match, чтобы получить числовой индекс, а затем заменить на его основе (используя base R)

c('a', 'b')[match(a, unique(a))]
#[1] "a" "b" "b" "a"
1 голос
/ 23 апреля 2019

Одним из способов продолжения здесь было бы определить два фрейма данных, один для начальных значений и другой для значений, которые должны быть отображены:

library(plyr)

df1 <- data.frame(a=c(2, 1, 1, 2))
df2 <- data.frame(a=c(1, 2), value=c('a', 'b'), stringsAsFactors=FALSE)

result <- join(df1, df2)$value
result

[1] "b" "a" "a" "b"

Наличие выделенного фрейма данных или таблицы для отображения значений, вероятно, является хорошей долгосрочной стратегией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...