gpt4 book ai didi

r - 查找列总和低于R中给定值的行

转载 作者:行者123 更新时间:2023-12-01 21:50:39 25 4
gpt4 key购买 nike

我有一个数据框(或 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)

关于r - 查找列总和低于R中给定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com