将列汇总到某个值

时间:2015-06-12 19:55:11

标签: r

我有一个包含2个变量的data.frame和177个观察结果。我想将一个变量总结为某个值,然后在达到该阈值时获取另一个变量的值。我将尝试添加一个可重现的示例。我是新来的,如果我做错了,请原谅我。

> df <- data.frame(x=10:1,y=1:10)
> print(df)
    x  y
1  10  1
2   9  2
3   8  3
4   7  4
5   6  5
6   5  6
7   4  7
8   3  8
9   2  9
10  1 10

我如何对列y求和,直到达到某个值,让我们说7,然后让它返回值X(4)或行1号}}。我确信它非常简单,但我似乎在画一个空白。

3 个答案:

答案 0 :(得分:2)

这是我的解决方案。

df[cumsum(df$y) <= 7,]
   x y
1 10 1
2  9 2
3  8 3

答案 1 :(得分:0)

OP只是要求x的相关值,这将使用:

完成
df$x[which(cumsum(df$y) >= 10)[1]]

另请注意,这会找到第一个cumsum(df $ y)至少为10,而其他答案找到最后一个&lt; = 7,这可能是不同的(虽然不适用于此数据集)。对于原始问题(预评论),它需要是:

df$x[which(cumsum(df$y) > 7)[1]]

答案 2 :(得分:0)

如果你想留在基地R,试试这个

> df$x[df$y >= 7][1]
[1] 4
> max(cumsum(df$y[df$y <= 7]))
[1] 28

或者,如果你需要矩阵形式:

> cbind(df$x[df$y >= 7][1], max(cumsum(df$y[df$y <= 7])))
     [,1] [,2]
[1,]    4   28

我仍然会考虑切换到data.table或至少dplyr个数据包以进行数据操作。