我想从数据框中选择第一行,条件是列中值的总和大于某个数字。例如,取数据集汽车。假设我想根据第二列中的值选择行。如果我的数字是7,那么第一和第二行将被选择,前两行的第二列中的值是(2 + 10)> 7);如果数字是34,将选择前4行(2 + 10 + 4 + 22> 34)
我尝试了以下操作,无论输入值是什么,都会返回所有行
foo<-function (z) {
for (i in 1: nrow (cars)) {
if(sum(cars[i,2])<z) {
sum(cars[1:i,2])
} else {
return (cars[1:i,])
}
}
return (cars[1:i,])
}
我也尝试过使用while
,但最终只有第一个值无休止地返回。
答案 0 :(得分:2)
我们可以使用cumsum
which
cars[seq(which.max(cumsum(cars$dist)>34)),]
这可以成为一个函数
f1 <- function(dat, col, thresh){
dat[seq(which.max(cumsum(dat[[col]])> thresh)),]
}
f1(cars, "dist", 34)
# speed dist
#1 4 2
#2 4 10
#3 7 4
#4 7 22
f1(cars, "dist", 7)
# speed dist
#1 4 2
#2 4 10