我有一个数据框orange_train,它具有231个变量和50,000个观察值。我想检查每个变量的NA或零。如果NA(对于因子)和零(对于数字和整数)的总和大于50,000的75%,我想消除这些变量。我的代码如下:但是它没有按预期工作:
counting_na <- function(x) {sum(is.na(x))}
counting_zero <- function(x){length(which(x==0))}
for(i in 1:ncol(orange_train)){
if (class(orange_train$Var[i])=='numeric' && sum(is.na(orange_train$Var[i]))< 32500)
{print(orange_train$Var[i])}
else (class(orange_train$Var[i])=='integer' && [enter image description here][1]counting_zero(orange_train$Var[i]) < 32500)
{print(orange_train$Var[i])}
有人可以帮我提供代码。我已经奋斗了很长时间,对R来说还是个新手。
我的列的标题为Var1-Var231,数据类型为数字,因子和整数。我希望这有帮助
示例数据
set.seed(10)
df <- data.frame(a = sample(c(NA, LETTERS[1]), 100, T, prob = c(.75, .25))
, b = sample(0:1, 100, T, prob = c(.75, .25)))
计算每列的百分比(NA
因子百分比0
,数字百分比)
percents <-
sapply(df, function(x){
if(is.factor(x)) mean(is.na(x))
else if(is.numeric(x)) mean(x == 0)
else NA})
percents
# a b
# 0.84 0.75
删除大于75%的
df[percents > 0.75] <- NULL
names(df)
#[1] "b"
您可以看到该列a
已删除,因为这是一个84%NA
的因素
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句