我有一个包含大量列的表格,我想删除超过500个缺失值的列。
我已经知道每列缺失值的数量:
library(fields)
t(stats(mm))
我得到了:
N mean Std.Dev. min Q1 median Q3 max missing values
V1 1600 8.67 … 400
有些列显示所有特征的NA:
N mean Std.Dev. min Q1 median Q3 max missing values
V50 NA NA NA NA NA NA
我也想删除这些列。
答案 0 :(得分:9)
这是一个单行班[{1}}
答案 1 :(得分:5)
如果您存储统计信息的结果,请执行以下操作:
tmpres<-t(stats(mm))
您可以执行以下操作:
whichcolsneedtogo<-apply(tmpres, 1, function(currow){all(is.na(currow)) || (currow["missing values"] > 500)})
最后:
mmclean<-mm[!whichcolsneedtogo]
当然这是未经测试的,因为您没有提供数据来重现您的示例。
答案 2 :(得分:4)
另一种可能的解决方案(对数据帧特别有效):
data[,!sapply(data,function(x) any(is.na(x)))]
答案 3 :(得分:0)
rem = NULL
for(col.nr in 1:dim(data)[2]){
if(sum(is.na(data[, col.nr]) > 500 | all(is.na(data[,col.nr])))){
rem = c(rem, col.nr)
}
}
data[, -rem]
答案 4 :(得分:0)
m是您正在使用的矩阵。 这会创建一个矢量wntg (代表哪个需要去) 列出NA值大于500的总和的列
可以轻松修改此比较的条件以满足您的需求
然后创建一个新的矩阵,我称之为mr(代表m简化),你已经删除了列 由向量定义,wntg
在这个简单的例子中,我已经完成了你想要排除超过2个NA的列的情况
wntg&LT;哪位(colSums(is.na(米))→2)
先生&LT; -m [, - C(wntg)]
> m<-matrix(c(1,2,3,4,NA,NA,7,8,9,NA,NA,NA), nrow=4, ncol =3)
> m
[,1] [,2] [,3]
[1,] 1 NA 9
[2,] 2 NA NA
[3,] 3 7 NA
[4,] 4 8 NA
> wntg<-which(colSums(is.na(m))>2)
> wntg
[1] 3
> mr<-m[,-c(wntg)]
> mr
[,1] [,2]
[1,] 1 NA
[2,] 2 NA
[3,] 3 7
[4,] 4 8