当我收到此错误时,我正在使用prcomp函数
Error in prcomp.default(x, ...) :
cannot rescale a constant/zero column to unit variance
Run Code Online (Sandbox Code Playgroud)
我知道我可以手动扫描我的数据,但R中是否有任何函数或命令可以帮助我删除这些常量变量?我知道这是一个非常简单的任务,但我从来没有遇到任何这样做的功能.
谢谢,
假设我在R中有以下数据框:
df1 <- data.frame(Item_Name = c("test1","test2","test3"), D_1=c(1,0,1),
D_2=c(1,1,1), D_3=c(11,3,1))
Run Code Online (Sandbox Code Playgroud)
我想创建一个删除没有方差的列的函数(例如,在这种情况下,它会删除列,D_2因为它只有1个值)
我知道我可以手工检查,但实际上我的数据非常大,我想自动化它.任何的想法?
我试图让许多lm模型在函数中工作,我需要从data.table中自动删除常量列.因此,我想只保留具有两个或更多唯一值的列,不包括NA计数.
我尝试了在SO上找到的几种方法,但我仍然无法删除具有两个值的列:常量和NA.
我可重现的代码:
library(data.table)
df <- data.table(x=c(1,2,3,NA,5), y=c(1,1,NA,NA,NA),z=c(NA,NA,NA,NA,NA),
d=c(2,2,2,2,2))
> df
x y z d
1: 1 1 NA 2
2: 2 1 NA 2
3: 3 NA NA 2
4: NA NA NA 2
5: 5 NA NA 2
Run Code Online (Sandbox Code Playgroud)
我的目的是删除列y,z和d,因为它们是常量,包括y,当NA省略s 时只有一个唯一值.
我试过这个:
same <- sapply(df, function(.col){ all(is.na(.col)) || all(.col[1L] == .col)})
df1 <- df[ , !same, with = FALSE]
> df1
x y
1: 1 1
2: 2 1
3: 3 NA
4: …Run Code Online (Sandbox Code Playgroud)