r - 计算数据框行中零的百分比
问题描述
我需要计算数据框中每一行的零百分比,并丢弃百分比高于给定阈值(60%)的行。我想我可以将这些值添加为一个新变量,mutate()
但我仍然不知道如何首先计算它们,因为列数非常大。有什么建议吗?
解决方案
我们可以编写一个小函数来测试 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()
函数使用所固有的转换为矩阵所困扰。
推荐阅读
- swift - Swift CoreData:发送到实例的无法识别的选择器
- list - 在没有递归的情况下计算Scheme?
- javascript - 仅读取字符串内的参数
- google-cloud-datastore - 要提醒的 Cloud Datastore 指标基线
- android - 自定义适配器中的空对象引用上的 ImageView setOnClickListener
- ruby-on-rails - 为 URI 调用私有方法“open”:模块错误
- django - 在 Django 中渲染 html 标签发送电子邮件
- reactjs - 要在 react-bootstrap-typeahead 中擦除的输入值
- c# - 一次更新多个 xaml 绑定
- android - 在 Android 上实现随机森林的方法