我有一个数据框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,数据类型为数字,因子和整数。希望对您有帮助
答案 0 :(得分:1)
示例数据
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
s的一个因素