R中的For循环和if语句

信德·维斯瓦纳森(Sindhu Viswanathan)

我有一个数据框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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章