Я думаю, что это простой вопрос, но я не нашел подходящего решения. Для начала набор упрощенных данных:
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
Мы видим, что все классы являются целыми числами. Чего я хочу добиться, так это конвертировать 4 класса в целое, числовое, символьное, и коэффициент соответственно. Конечно, я могу использовать
df$V1 <- as.XXX(df$V1)
для каждого столбца, но я думаю, что это неэффективно.
Ожидаемый результат
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
Вопрос 2
Я ссылаюсь на ответ @ joran в R Назначить (или скопировать) классы столбцов из фрейма данных в другой и запустить следующий код:
myclass <- c("integer", "numeric", "character", "factor")
df.2 <- df
df.2[] <- mapply(FUN = as, df.2, myclass, SIMPLIFY = F)
Когда я звоню df.2
, появляется ошибка:
Ошибка в as.character.factor (x): неправильный коэффициент
Тем не менее, можно дозвониться до str(df.2)
, и, видимо, только V1
и V3
достигают моего запроса.
str(df.2)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4:Formal class 'factor' [package "methods"] with 3 slots
# .. ..@ .Data : int 16 17 18 19 20
# .. ..@ levels : chr
# .. ..@ .S3Class: chr "factor"
Почему функция as
не может работать с классами numeric
и factor
?