首页 > 解决方案 > 计算数据框行中零的百分比

问题描述

我需要计算数据框中每一行的零百分比,并丢弃百分比高于给定阈值(60%)的行。我想我可以将这些值添加为一个新变量,mutate()但我仍然不知道如何首先计算它们,因为列数非常大。有什么建议吗?

标签: r

解决方案


我们可以编写一个小函数来测试 0 的总和,然后apply()使用它删除所有需要的行Base R

## sampling data ##

set.seed(82)
df <- data.frame(a = sample(c(0,1,2,3), 10, replace = T), 
                 b = sample(c(0,1,2,3), 10, replace = T), 
                 c = sample(c(0,1,2,3), 10, replace = T),
                 d = sample(c(0,1,2,3), 10, replace = T), 
                 e = sample(c(0,1,2,3), 10, replace = T))

## function to find rows ##

row.discard <- function(vec, tresh = 0.1){
  t <- sum(vec == 0) / length(vec)
    if(t > tresh){
    T
    }
    else{
    F
    }
}

## apply to our df ##

ind <- apply(df, 1, row.discard)

## result ##

df[!ind,]

  a b c d e
1 3 2 2 3 2
5 2 1 1 2 1
6 1 2 3 3 3
7 1 3 3 1 2

注意:由于我们apply()用于获取索引,因此不将其应用于 df 本身,我们不会被apply()函数使用所固有的转换为矩阵所困扰。


推荐阅读