R - Замена уровней фактора с использованием другого вектора

У меня есть вектор под названием "национальность", который указывает на национальность респондентов в моем фрейме данных (df). Проблема, однако, заключается в том, что в настоящее время это целочисленный вектор, который идет от 1 до 193. У меня есть еще один вектор-строка, который называется "метки" с метками каждой национальности (т. Е. В первом столбце написано "афганец", во втором - "албанец")., так далее.). Я хочу преобразовать вектор "национальности" в фактор и заменить его числовые значения метками. Я попробовал это:

df$nationality <- as.factor(df$nationality)
labels2 <- names(labels)
levels(df$nationality) <- labels2

Но это не работает:(

Помогите, пожалуйста. Заранее спасибо!

1 ответ

Решение

Я это сделал! Но мне пришлось сделать промежуточный шаг и вручную сохранить файл с 193 национальными метками в виде файла xlsx. Вот мое решение:

## Creating data frame with 5 respondents and its corresponding nationalities (dim 5 x 2):

df <- data.frame(respondentId = c(1, 2, 3, 4, 5), nationality = c(166, 91, 4, 49, 128))

## Downloading nationality labels from guavastudios.com:

fileUrl <- "http://www.guavastudios.com/downloads/nationalities/nationalities.txt"
download.file(fileUrl, destfile= "./nationalities.txt", method = "curl")

## Then I copied nationalities.txt to one column in Excel and saved the xlsx file. It
# contains 193 rows (or labels for 193 different nationalities).

## Loading xlsx package. If you do not have it installed, first type install.packages("xlsx").

library(xlsx)

## Reading the xlsx file and saving it as an object in R called "labelsNAtion":

labelsNation <- read.xlsx("./nationalities.xlsx", sheetIndex = 1, header = FALSE)

## Replacing numbers for nationality labels in the second column of df:

df$nationality <- factor(df$nationality, levels=c(1:193), labels = labelsNation[,1])
Другие вопросы по тегам