【发布时间】:2018-01-14 20:12:13
【问题描述】:
我试图让许多 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
我的意图是删除 y、z 和 d 列,因为它们是常量,包括在省略 NAs 时只有一个唯一值的 y。
我试过了:
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: NA NA
5: 5 NA
正如所见,'y' 仍然存在...... 有什么帮助吗?
【问题讨论】:
标签: r data.table