使用lappy列出R中每列中空变量的百分比

使用lappy列出R中每列中空变量的百分比,r,apply,lapply,mapply,R,Apply,Lapply,Mapply,我得到了一个大的csv,它有115列,1000行。这些列有各种各样的数据,有些是基于字符的,有些是整数的,等等。但是,这些数据有许多不同类型的空变量(NA,-999,空,等等) 我想做的是编写一个脚本,生成一个列列表,其中列中超过30%的数据是某种类型的NULL 为此,我编写了一个脚本,为一列提供空百分比(十进制)。这个脚本对我来说很好 我想为所有列编写一个脚本。我相信我需要使用lappy函数 我尝试在这里执行此操作,但是,我似乎根本无法使此脚本正常工作: Null_Counter <-

我得到了一个大的csv,它有115列,1000行。这些列有各种各样的数据,有些是基于字符的,有些是整数的,等等。但是,这些数据有许多不同类型的空变量(NA,-999,空,等等)

我想做的是编写一个脚本,生成一个列列表,其中列中超过30%的数据是某种类型的NULL

为此,我编写了一个脚本,为一列提供空百分比(十进制)。这个脚本对我来说很好

我想为所有列编写一个脚本。我相信我需要使用lappy函数

我尝试在这里执行此操作,但是,我似乎根本无法使此脚本正常工作:

Null_Counter <- lapply(indata, 2, length(x),
                   length(which(indata == "" | is.na(indata) | indata == "NA" | indata == "-999" | indata == "0")))
                   names(indata(which(0.3>=Null_Counter / nrow(indata))))
以及:

理想情况下,我希望它给我的是一个所有列名的向量列表,其中所有空变量(NA,-999,0,null)的百分比超过30%


有人能帮忙吗

我相信您希望使用apply而不是lappy将函数应用于列表。 试试这个:

Null_Counter <- apply(indata, 2, function(x) length(which(x == "" | is.na(x) | x == "NA" | x == "-999" | x == "0"))/length(x))
Null_Name <- colnames(indata)[Null_Counter >= 0.3]

Null\u Counter在
数据中有一种不同的方法来执行此操作。表

#first, make a reproducible example:
library(data.table)
#make it so that all columns have ~30% "NA" as you define it
dt<-as.data.table(replicate(
  115,sample(c(1:100,"",NA,"NA",-999,0),size=1000,replace=T,
             prob=c(rep(.007,100),rep(.06,5)))))

lappy
不需要
MARGIN
。它用于
应用
。您可以查看
?lappy
中的示例,非常感谢。我的最终解决方案是:空计数
Error: could not find function "indata"
Null_Counter <- apply(indata, 2, function(x) length(which(x == "" | is.na(x) | x == "NA" | x == "-999" | x == "0"))/length(x))
Null_Name <- colnames(indata)[Null_Counter >= 0.3]
#first, make a reproducible example:
library(data.table)
#make it so that all columns have ~30% "NA" as you define it
dt<-as.data.table(replicate(
  115,sample(c(1:100,"",NA,"NA",-999,0),size=1000,replace=T,
             prob=c(rep(.007,100),rep(.06,5)))))
x<-as.matrix(dt[,lapply(.SD,function(x){
  mean(is.na(x) | x %in% c("","NA","-999","0"))})])
colnames(x)[x>.3]
dt[,!colnames(x)[x>.3],with=F]