2015-07-08 7 views
1

a вектор в RЕсть ли более простой способ перевода чисел в строки?

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

, что я хочу, чтобы «перевести» в (временный) вектор строк так, что 1 становится "foo", 2 становится "bar" и 3 становится "baz".

я могу добиться этого с sapply:

> sapply(a, function(x) {if (x==1) return ('foo'); if (x==2) return ('bar'); return ('baz')}) 

[1] "foo" "bar" "baz" "baz" "bar" "baz" "foo" "bar" "foo" 

Однако, я думаю, что должен быть альтернативный способ сделать это без (то, что я воспринимаю как злоупотребляя) sapply. Это так?

+0

Просто из любопытства , почему этот ответ, а не (первый) мой? –

+0

Оба ответа верны, и я должен был выбрать один. Казалось, что использование одного лайнера подходит для моей цели лучше для временного назначения. –

+0

Я вижу. Спасибо. –

ответ

5

Просто попробуйте:

c("foo","bar","baz")[a] 
#[1] "foo" "bar" "baz" "baz" "bar" "baz" "foo" "bar" "foo" 
2

Другим очевидным решением является считать данные факторы:

factor(a, c(1, 2, 3), c("foo", "bar", "baz")) 
# [1] foo bar baz baz bar baz foo bar foo 
# Levels: foo bar baz 

Wrap с as.character для представления символов:

as.character(factor(a, c(1, 2, 3), c("foo", "bar", "baz"))) 
# [1] "foo" "bar" "baz" "baz" "bar" "baz" "foo" "bar" "foo" 
Смежные вопросы