【问题标题】:Remove columns with certain number of zeros - R删除具有一定数量零的列 - R
【发布时间】:2015-10-17 13:56:02
【问题描述】:

如何删除数据中超过 6 个零的列?

请告诉我如何使我的示例代码实现我需要做的事情,如果您有更短的方法,也请告诉我。解释和教我为什么它会起作用也将不胜感激。

我删除零的示例代码:

removeThese = c()
for(i in 1:ncol(myData))
{
rowsWithZeros = which(myData[,i] == 0)
if(length(rowsWithZeros) > 6)
{
removeThese = c(removeThese, i)
}
}
myData= myData[,-removeThese]

【问题讨论】:

  • 是矩阵还是数据框?

标签: r


【解决方案1】:

怎么样

i <- colSums(myData == 0, na.rm=TRUE) < 7
myData <- myData[, i, drop=FALSE]

或者,跟随理查德

i <- colSums(myData == 0, na.rm=TRUE) < 7
myData <- myData[i]

【讨论】:

  • 如果你使用列表子集,你就不需要drop,比如data[colSums(data == 0, na.rm = TRUE) &lt; 7]
【解决方案2】:

如果您想缩短行数,用适当的 *apply 语句替换 for 循环效果很好。

sixZeroes = function(col) {
  sum(col==0)>6
}

myData=myData[,apply(myData,2,sixZeroes)]

如果你想要一个单行,函数可以是内联的。

【讨论】:

  • 2 是干什么用的? myData=myData[,apply(myData,2,sixZeroes)]
  • 是apply函数中的MARGIN参数。看看?apply
  • 哦,我明白了!谢谢!!
【解决方案3】:

如果你有一个数据框:

Filter(function(x) sum(x==0)<=6, df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2019-09-14
    • 1970-01-01
    相关资源
    最近更新 更多