函数返回其中一列值总和大于数字R的第一行
我希望在列中的值之和大于某个数字的条件下,从数据帧中选择第一行。例如,以汽车数据集为例。假设我想根据第二列中的值选择行。如果我的编号为7,则将选择第一行和第二行。第二列中前两行的值为2+10>7;如果数字为34,则将选择前4行2+10+4+22>34 我尝试了以下方法,它返回所有行,而不考虑输入值函数返回其中一列值总和大于数字R的第一行,r,R,我希望在列中的值之和大于某个数字的条件下,从数据帧中选择第一行。例如,以汽车数据集为例。假设我想根据第二列中的值选择行。如果我的编号为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]
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,但最终只有第一个值被无休止地返回。我们可以用它做一个求和运算
这可以变成一个函数
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
我认为康姆苏姆会好得多。请共享一个样本数据以及基于该样本的预期输出使用cumsum,添加另一列作为cumsum,然后根据该值选择Guess seq_lenfindIntervalthresh,cumsumcars$dist+1可能更有效。@nicola谢谢,我只是用findInterval进行测试,但没有使用cumsum部分,谢谢。因为这是一个不同的选择,你最好把它作为一个答案。
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