Назначьте метки факторам в R с помощью .csv-файла - PullRequest
0 голосов
/ 12 июля 2020

Я работаю с файлом .csv в R, в котором есть один столбец, который я хочу рассматривать как фактор. Он содержит числа.

variable1
1 
2
4
4
1
3
and so on

Теперь я хочу присвоить метки этой переменной фактора. То, что я сделал, сработало:

v1$variable1 <- factor(v1$variable1,
                            levels = c(1,2,3, 4, 5, 6 (and so on)),
                            labels = c("school 1", "school 2", "school 3", "school 4", "school 5",
                                       "school 6" (and so on)) 

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

level   lables
1       school1
2       school2
3       school3
and so on

, а затем прочитать этот CSV-файл в R-коде и назначить метки на основе этого второго файла CVS. Возможно ли это, и если да, то как?

Большое спасибо за любую помощь !!

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Если вы создаете другой CSV в v2, вы можете использовать match, чтобы сопоставить variable1 с level и получить соответствующий lables.

v1$variable2 <- v2$lables[match(v1$variable1, v2$level)]
v1$variable2 <- factor(v1$variable2)

Возможно, в этом случае подойдет и merge

v1 <- merge(v1, v2, by.x = 'variable1', by.y = 'level')
0 голосов
/ 12 июля 2020

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

school_lut <- data.frame(
  value = c(1, 2, 3, 4, 5),
  label = c("Cambridge", "Bezt school", "R", "S", "Holly")
)

school_lut_ss <- school_lut[school_lut$value %in% df$var1, ]
# Previous step only needed to eliminate levels you don't have in your data
df$var1 <- factor(df$var1, school_lut_ss$value, school_lut_ss$label)

table(df$var1)

# Cambridge Bezt school           S       Holly 
#         1           4           1           2 

Данные

set.seed(12)
df <- data.frame(
  var1 = sample(1:5, size = 8, replace = TRUE)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...