删除包含大量零的列

时间:2013-03-08 15:25:40

标签: r

我正在改进我的数据框以摆脱无用的变量。我做的第一步是使用以下命令删除行数超过一半的列:

limit <- nrow(mydata)/2
mydata <- mydata[, which(as.numeric(colSums(!is.na(mydata))) > limit)] 

我期待为零做同样的事,但我找不到像“is.zero()”这样的函数,我怎么能这样做?

我期待的另一件事是删除任何重复任何值超过“限制”次数的列(如果存在这样的命令,那将是理想的!)

非常感谢,

2 个答案:

答案 0 :(得分:5)

只是做:

mydata <- mydata[, which(as.numeric(colSums(mydata != 0)) > limit)] 

对于删除重复超过“限制”次数的任何值的列,您可以使用tableanyapply

mydata <- mydata[, which(apply(mydata, 2, function(col) !any(table(col) > limit)))] 

最后请注意,which这两种情况都是可选的,第一种情况下的as.numeric是不必要的。你可以这样做:

mydata <- mydata[, colSums(mydata != 0) > limit] 

答案 1 :(得分:2)

要查找非零,只需将!is.na(mydata)替换为mydata != 0

要获得最常用元素的计数,您可以使用:

> mydata <- c(1,2,3,4,1,1,1,2,1,3)
> sort(table(mydata), decreasing=T)[[1]]
[1] 5

要查看最重复的实际值:

> names(sort(table(mydata), decreasing=T)[1])
[1] "1"

如果您不关心保留该值,可以使用max()代替sort()

> max(table(mydata))
[1] 5