Я не могу найти простой способ выбрать только столбцы номинальных (неупорядоченных факторов) переменных из фрейма данных.
Я пытался использовать выражение "!is.ordered" для захвата переменных фактора, которые не упорядочены, но это выдает ошибку.
df=mtcars
df$am=as.factor(df$am)
df$carb=as.ordered(df$carb)
df2=df[,lapply(df,(is.factor & !is.ordered))]
Ошибка в !is.ordered : неверный тип аргумента
Это тоже не работает:
df=mtcars
df$am=as.factor(df$am)
df$carb=as.ordered(df$carb)
df2=df[,sapply(df, is.factor)]
ords=unlist(lapply(df2,is.ordered))
df2=df2[,-ords]
names(df2)
НУЛЕВОЙ
Попробуйте с dplyr
:
dplyr::select_if (df, ~ !is.ordered(.))
df[,sapply(df, function(x) is.factor(x) & !is.ordered(x)), drop = FALSE]
dplyr::select_if (df, ~ !is.ordered(.) & is.factor(.)) # Extended by is.factor of utubun
С точки зрения удобочитаемости if предпочел бы функцию dplyr, но всегда приятно иметь альтернативу base
R.
Согласитесь,
base
всегда должен присутствовать в качестве решения. +