r - 查找列的总和低于 R 中给定值的行
问题描述
我有一个数据框(或 data.table)。我想按列的升序对行进行排序,然后选择列值总计刚好低于给定值的行。
例如,假设我有 mtcars 数据框。我已经按照 qsec 列的升序对行进行了排序。现在我想找到 qsec 值的总和低于 100 的行。如果我添加下一行,总和将超过 100。
我为此写了一个while循环,但我正在寻找一个更好的矢量解决方案。
> head((mtcars[order(mtcars$qsec), ]))
mpg cyl disp hp drat wt qsec vs am gear carb
Ford Pantera L 15.8 8 351 264 4.22 3.17 14.50 0 1 5 4
Maserati Bora 15.0 8 301 335 3.54 3.57 14.60 0 1 5 8
Camaro Z28 13.3 8 350 245 3.73 3.84 15.41 0 0 3 4
Ferrari Dino 19.7 6 145 175 3.62 2.77 15.50 0 1 5 6
Duster 360 14.3 8 360 245 3.21 3.57 15.84 0 0 3 4
Mazda RX4 21.0 6 160 110 3.90 2.62 16.46 0 1 4 4
解决方案
在 data.table 中使用order
排列列和cumsum
函数来查找累积总和小于您的截止值的行
library(data.table)
mtcars <- copy(mtcars) # because binding is locked
setDT(mtcars) # convert to data.table
setorder(mtcars, qsec) # reorder rows
out <- mtcars[cumsum(qsec) < 100] # filter rows
out
在 tidyverse 中用于arrange
对列进行排序并按filter
条件选择行
library(tidyverse)
mtcars %>% arrange(qsec) %>% filter(cumsum(qsec) < 100)
推荐阅读
- java - 仅当满足特定条件时,如何激活 OSGI 包?
- c# - OnApplicationPause 延迟工作
- c++ - 抛出未处理的异常:读取访问冲突。_Pnext 为 0xC
- reactjs - 创建用于拆分字符串的自定义 Hook (React JS)
- python - 函数的monkeypatching中的setattr抛出属性错误
- angular - 递归调用角组件时,mat-accordion 滞后
- html - Django分页问题 - 页面没有分页
- android - 在 android 的 Sqlite 数据库中插入记录后立即启动 API 调用
- string - 在scala中将字符串转换为大写
- android - (Android) OkHttpClient基于url缓存(不同url缓存不同)