Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数返回其中一列值总和大于数字R的第一行_R - Fatal编程技术网

函数返回其中一列值总和大于数字R的第一行

函数返回其中一列值总和大于数字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]

我希望在列中的值之和大于某个数字的条件下,从数据帧中选择第一行。例如,以汽车数据集为例。假设我想根据第二列中的值选择行。如果我的编号为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,但最终只有第一个值被无休止地返回。

我们可以用它做一个求和运算

这可以变成一个函数

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