Это кажется простым, но я вращаю свои колеса.
У меня есть 80 символьных переменных.Я хочу 1) просмотреть уникальные значения в каждой переменной, 2) просмотреть количество уникальных значений и 3) преобразовать некоторые или все переменные в факторы.
Я могу сделать это одно за другим, явно назвав столбцы:
df$var1 # "val2" "val2" "val1" "val2" ...
unique(df$var1) # "val1" "val2" "val3"
length(unique(df$var1)) # 3
df$var1 = as.factor(df$var1)
... хотя это приводит к ошибке:
levels(df@var1)
# Error in levels(df@var1) :
# trying to get slot "var1" from an object (class "tbl_df")
# that is not an S4 object
Но когдаЯ создаю список символьных переменных и пробую то же самое, что и выше, это не работает.
# create list of char vars
char_vars_names <- names(df[, sapply(df, class) == 'character'])
char_vars_names
#[1] "var1" "var2" "var3" ...
df$char_vars_names[1] # NULL
# Warning message: Unknown or uninitialised column: 'char_vars_names'.
unique(df$char_vars_names[1]) # NULL
length(unique(df$char_vars_names[1])) # 0
Как только я получу вышеуказанную работу, я полагаю, что могу перебрать список с помощью цикла for:
for (i in range(length(char_vars_names))) {
# code
}
Что это за объект char_vars_names или где-то еще в моем коде, что делает это неработоспособным?
В случае, если это полезно, вот мой импорт и прием данных док вышеуказанному коду:
library(car)
library(lattice)
library(tidyverse)
library(ISLR)
library(Lahman)
library(mdsr)
file = "file.csv"
df <- read_csv(
file=file,
col_names = TRUE,
skip = 3,
na = c("", "NA"))