我有一个包含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号}}。我确信它非常简单,但我似乎在画一个空白。
答案 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
个数据包以进行数据操作。