也许这是一个愚蠢的问题,但我是SAS的新转换者,我仍然在想办法。在运行模型之前清理数据集的最简单方法是什么。例如:我有一个包含100个变量的数据集。如何在运行模型之前删除少于2个级别的字符/因子变量?这似乎是在SAS中动态发生的,我发现在建模之前手动删除R中的变量很痛苦。当然应该有更好的方法。提前谢谢。
答案 0 :(得分:3)
您可以尝试:(修改@Richard Scriven不回答)
indx <- sapply(dat, function(x) length(levels(x))<2 & is.factor(x))
dat1 <- dat[,!indx]
head(dat1)
# Col1 Col3
#1 1.3709584 B
#2 -0.5646982 B
#3 0.3631284 B
#4 0.6328626 D
#5 0.4042683 A
#6 -0.1061245 D
如果您同时拥有character
和factor
列,并希望删除<2
唯一levels/values
dat$Col4 <- as.character(dat$Col4)
如果我尝试上面的代码,我会得到(这是错误的):
head(dat[,!indx],2)
# Col1 Col3 Col4
#1 1.3709584 B Yes
#2 -0.5646982 B Yes
在这里,您可以这样做:
indx1 <- sapply(dat, function(x) !is.numeric(x) & length(unique(x))<2)
head(dat[,!indx1])
# Col1 Col3
#1 1.3709584 B
#2 -0.5646982 B
#3 0.3631284 B
#4 0.6328626 D
#5 0.4042683 A
#6 -0.1061245 D
set.seed(42)
dat <- data.frame(Col1=rnorm(25), Col2=LETTERS[1],
Col3=sample(LETTERS[1:5], 25, replace=TRUE), Col4="Yes")