У меня есть код, в котором я извлекаю файл CSV в R. У меня около 40-50 переменных, и я хочу уменьшить размеры для дальнейшего анализа. Большинство столбцов в наборе данных имеют формат INT, FACTOR ИЛИ NUM. Тип моего фрейма данных BO - список. Ошибка в приведенном ниже коде: «Ошибка в cor (BO): «x» должен быть числовым».
heatmap(cor(BO),Rowv = NA,Colv = NA)
у меня есть много факторов в моем Dataframe. Что делать в этом случае?
Как упоминалось в комментариях, у вас есть нечисловые значения в вашем data.frame
, которые вам нужно исключить:
heatmap(cor(BO[, sapply(BO, is.numeric)]),Rowv = NA,Colv = NA)
Объяснение
С помощью sapply
вы перебираете все столбцы вашего фрейма данных (который внутренне хранится как list
с инвариантом, согласно которому все элементы должны иметь одинаковую длину) и применяете функцию is.numeric
к столбцам. Вы получаете логический вектор для всех столбцов, которые являются числовыми. Теперь с помощью этого вектора вы можете выбрать правильные столбцы.
Пример со встроенным набором данных
## does not work for the same reason
heatmap(cor(iris))
# Error in cor(iris) : 'x' must be numeric
## works
heatmap(cor(iris[, sapply(iris, is.numeric)]))
Ошибка: неожиданное ']' в "тепловой карте (cor (BO [, sapply (BO, is.numeric)]"
Исправил, забыл закрывающую скобку. Если бы ваш код был полным, я мог бы протестировать его раньше;)
Это сработало. Спасибо :) Но я хочу знать, как я могу уменьшить переменные из моего набора данных с помощью PCA.
Я использую следующую команду для запуска PCA BO_pca <- prcomp(BO[, sapply(BO, is.numeric)], center = TRUE, scale = TRUE)
Это приводит к следующей ошибке. Ошибка в prcomp.default(BO[, sapply(BO, is.numeric)], center = TRUE, scale = TRUE): невозможно масштабировать постоянный/нулевой столбец до единичной дисперсии
Это еще одна проблема (которую тоже можно легко решить), поэтому, пожалуйста, задайте для нее новый вопрос.
у вас, вероятно, есть факторы или символы в вашем объекте
BO
.