Я выполняю pcas для нескольких групп в большом наборе данных, используя dplyr
.Когда данные разделяются на группы с помощью функции group_by
, некоторые переменные имеют одинаковую дисперсию, поэтому pca не может работать.Как я могу удалить любые столбцы с одинаковой дисперсией, а затем выполнить prcomp
с тем, что осталось?Фиктивные данные ниже.Спасибо.
Добавить равную дисперсию для сетоса - Sepal.Length.
library(dplyr)
iris[1:50,1]<-0
Попытка запустить pcas с равной дисперсией
> iris%>%
+ group_by(Species)%>%
+ group_map(~prcomp(.[,1:4], scale.=T))
Error in prcomp.default(.[, 1:4], scale. = T) :
cannot rescale a constant/zero column to unit variance
Проверка на равную дисперсию
> iris%>%
+ group_by(Species)%>%
+ group_map(~names(.[,1:4][, sapply(.[,1:4], function(v) var(v, na.rm=TRUE)==0)]))
[[1]]
[1] "Sepal.Length"
[[2]]
character(0)
[[3]]
character(0)
Попытка исключить столбец равной дисперсии и выполнить pcas
> iris%>%
+ group_by(Species)%>%
+ group_map(~sapply(.[,1:4], function(v) var(v, na.rm=TRUE)>0))%>%
+ group_map(~prcomp(.[,1:4], scale.=T))
Error in UseMethod("group_split") :
no applicable method for 'group_split' applied to an object of class "list"