Для l oop для преобразования нескольких столбцов в коэффициенты в R - PullRequest
2 голосов
/ 11 апреля 2020

У меня есть несколько столбцов, которые нужно преобразовать в коэффициенты

for cols in ['col1','col2']:
  df$cols<-as.factor(as.character(df$cols))

Ошибка

for cols in ['col1','col2']:
Error: unexpected symbol in "for cols"
>   df$cols<-as.factor(as.character(df$cols))
Error in `$<-.data.frame`(`*tmp*`, cols, value = integer(0)) : 
  replacement has 0 rows, data has 942

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

В дополнение к решению @akrun с data.table это можно сделать легко:

library(data.table)
setDT(df)
df[,c("col1","col2") := lapply(.SD, function(c) as.factor(as.character(c))), .SDcols = c("col1","col2")]

Обратите внимание, что df обновляется по ссылке (:=), поэтому нет необходимости переназначения

1 голос
/ 11 апреля 2020

Синтаксис показал также использовать python for l oop и python list. Вместо этого это будет vector строк в `R

for (col in c('col1','col2')) {
       df[[col]] <- factor(df[[col]])
  }

ПРИМЕЧАНИЕ: здесь мы используем [[ вместо $ и фигурные скобки {}. factor может быть применен непосредственно вместо as.character упаковка


или с lapply, где это можно сделать легко (без использования каких-либо пакетов)

df[c('col1', 'col2')] <- lapply(df[c('col1', 'col2')], factor)

или в dplyr, где это можно сделать проще

library(dplyr)
df <- df %>%
          mutate_at(vars(col1, col2), factor)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...