我正在改进我的数据框以摆脱无用的变量。我做的第一步是使用以下命令删除行数超过一半的列:
limit <- nrow(mydata)/2
mydata <- mydata[, which(as.numeric(colSums(!is.na(mydata))) > limit)]
我期待为零做同样的事,但我找不到像“is.zero()”这样的函数,我怎么能这样做?
我期待的另一件事是删除任何重复任何值超过“限制”次数的列(如果存在这样的命令,那将是理想的!)
非常感谢,
答案 0 :(得分:5)
只是做:
mydata <- mydata[, which(as.numeric(colSums(mydata != 0)) > limit)]
对于删除重复超过“限制”次数的任何值的列,您可以使用table
,any
和apply
:
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