Спасибо! но у меня есть другая проблема. У меня есть имя каждого столбца в массиве символов col_names []. Как я могу использовать вышеупомянутую команду (mydf $ col_names [i]) не работает.
Расул
Любой способ сделать это автоматически для всех символьных переменных, как data.frame делает это с stringsAsFactors?
Этьен Лоу-Декари
@ EtienneLow-Décarie: просто unclassи использовать data.frameна результат.
IRTFM
Ответы:
197
Привет добро пожаловать в мир R.
mtcars #look at this built in data set
str(mtcars)#allows you to see the classes of the variables (all numeric)#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)#another approach
mtcars[,'cyl']<- as.factor(mtcars[,'cyl'])
str(mtcars)# now look at the classes
Это также работает для символов, дат, целых чисел и других классов
Поскольку вы новичок в R, я бы посоветовал вам взглянуть на эти два сайта:
Спасибо! но у меня есть другая проблема. У меня есть имя каждого столбца в массиве символов col_names []. Как я могу использовать приведенную выше команду (ни, mydf$col_names[i]ни mydf[,col_names[i]]не работает.)
Rasoul
1
@Rasoul, mydf[, col_names]сделаю это
DrDom
3
+1 за реф. Это основные вещи, о которых можно спросить, но также хорошо знать о большой работе, проделанной в этих (и подобных) работах.
Роман Луштрик
84
# To do it for all names
df[]<- lapply( df, factor)# the "[]" keeps the dataframe structure
col_names <- names(df)# do do it for some names in a vector named 'col_names'
df[col_names]<- lapply(df[col_names], factor)
Объяснение. Все кадры данных являются списками, и результаты [использования с многозначными аргументами также являются списками, поэтому задача циклирования списков - это задача lapply. Приведенное выше назначение создаст набор списков, в которые функция data.frame.[<-должна успешно вернуться обратно в фрейм данных,df
Другой стратегией будет преобразование только тех столбцов, в которых количество уникальных элементов меньше некоторого критерия, скажем, меньше, чем журнал количества строк в качестве примера:
Это очень хорошее решение! Он также может работать с номерами столбцов, что может быть особенно полезно, если вы хотите изменить многие, но не все. Например, col_nums <- c (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57), затем df [, col_nums] <- lapply (df [, col_nums] фактор).
WGray
Предостережение: первое решение не работает, если length(col_names)==1. В этом случае df[,col_names]автоматически переводится в вектор вместо списка длиной 1, а затем lapplyпытается работать с каждой записью, а не над столбцом в целом. Это можно предотвратить с помощью df[,col_names,drop=FALSE].
П Шнелл
Это хороший момент. Другой вызов, который сохранил бы статус списка, должен использовать df[col_names].
IRTFM
27
Вы можете использовать dplyr::mutate_if()для преобразования всех столбцов символов или dplyr::mutate_at()для выбора столбцов именованных символов в факторы:
library(dplyr)# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
Если вы хотите изменить все символьные переменные в вашем data.frame на факторы после того, как вы уже загрузили свои данные, вы можете сделать это следующим образом, на data.frame с именем dat:
Полное преобразование каждой символьной переменной в фактор обычно происходит при чтении данных, например, с помощью stringsAsFactors = TRUE, но это полезно, когда, скажем, вы прочитали данные read_excel()из readxlпакета и хотите обучить модель случайного леса, которая не принимает символьные переменные.
Сэм Фирке
13
Другой короткий способ, которым вы можете воспользоваться, - это pipe ( %<>%) из пакета magrittr . Он преобразует символьный столбец mycolumn в фактор.
Пожалуйста, отредактируйте с дополнительной информацией. Ответы «только код» и «попробуй это» не приветствуются, поскольку они не содержат контента для поиска и не объясняют, почему кто-то должен «попробовать это». Мы прилагаем все усилия, чтобы быть источником знаний.
Брайан Томпсетт - 莱恩 莱恩
Пожалуйста, если я хочу использовать его для всех столбцов моего DF?
Мостафа
5
Я делаю это с помощью функции. В этом случае я буду преобразовывать только символьные переменные в множители:
unclass
и использоватьdata.frame
на результат.Ответы:
Привет добро пожаловать в мир R.
Это также работает для символов, дат, целых чисел и других классов
Поскольку вы новичок в R, я бы посоветовал вам взглянуть на эти два сайта:
Справочные руководства R: http://cran.r-project.org/manuals.html
R Справочная карточка: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
источник
mydf$col_names[i]
ниmydf[,col_names[i]]
не работает.)mydf[, col_names]
сделаю этоОбъяснение. Все кадры данных являются списками, и результаты
[
использования с многозначными аргументами также являются списками, поэтому задача циклирования списков - это задачаlapply
. Приведенное выше назначение создаст набор списков, в которые функцияdata.frame.[<-
должна успешно вернуться обратно в фрейм данных,df
Другой стратегией будет преобразование только тех столбцов, в которых количество уникальных элементов меньше некоторого критерия, скажем, меньше, чем журнал количества строк в качестве примера:
источник
length(col_names)==1
. В этом случаеdf[,col_names]
автоматически переводится в вектор вместо списка длиной 1, а затемlapply
пытается работать с каждой записью, а не над столбцом в целом. Это можно предотвратить с помощьюdf[,col_names,drop=FALSE]
.df[col_names]
.Вы можете использовать
dplyr::mutate_if()
для преобразования всех столбцов символов илиdplyr::mutate_at()
для выбора столбцов именованных символов в факторы:источник
Если вы хотите изменить все символьные переменные в вашем data.frame на факторы после того, как вы уже загрузили свои данные, вы можете сделать это следующим образом, на data.frame с именем
dat
:Это создает вектор, определяющий, какие столбцы относятся к классу
character
, а затем применяетсяas.factor
к этим столбцам.Образец данных:
источник
stringsAsFactors = TRUE
, но это полезно, когда, скажем, вы прочитали данныеread_excel()
изreadxl
пакета и хотите обучить модель случайного леса, которая не принимает символьные переменные.Другой короткий способ, которым вы можете воспользоваться, - это pipe (
%<>%
) из пакета magrittr . Он преобразует символьный столбец mycolumn в фактор.источник
Я делаю это с помощью функции. В этом случае я буду преобразовывать только символьные переменные в множители:
источник
[[i]]