如何计算前几行的值,直到达到标准?

问题描述 投票:0回答:1

我有一个数据集,其中每一行表示参与者的一次正确/错误交互。我想计算错误交互的数量,直到参与者记录了两次正确答案

我的数据框如下所示:

id = c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3)
accuracy = c(0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1)
timestamp = c(2405.078,2409.575,2414.239,2419.084,2424.138,2428.510,805.5845,812.2674,817.6420,822.5424,828.0416,832.9703,842.2013,456.9943,463.0222,469.0649,475.2177,480.3976,486.9402,491.5632,497.0068)

df <-data.frame(id, accuracy, timestamp)

我正在考虑使用 rle 函数,但我不知道如何添加条件。我需要创建一个新变量,它为我提供了满足条件之前的试验计数。

它应该看起来像这样:

身份证 试用次数
1 5
2 5
3 4

理想情况下,我会添加另一列来计算达到时间戳条件所需的时间。 感谢您的帮助!

r dplyr counter rle
1个回答
0
投票

我最初会这样做:

df |> dplyr::mutate(tworight = cumsum(accuracy) >1, .by = id)

给出:

   id accuracy timestamp tworight
1   1        0 2405.0780    FALSE
2   1        1 2409.5750    FALSE
3   1        0 2414.2390    FALSE
4   1        0 2419.0840    FALSE
5   1        1 2424.1380     TRUE
6   1        1 2428.5100     TRUE
7   2        1  805.5845    FALSE
8   2        0  812.2674    FALSE
9   2        0  817.6420    FALSE
10  2        0  822.5424    FALSE
11  2        1  828.0416     TRUE
12  2        1  832.9703     TRUE
13  2        1  842.2013     TRUE
14  3        0  456.9943    FALSE
15  3        0  463.0222    FALSE
16  3        0  469.0649    FALSE
17  3        0  475.2177    FALSE
18  3        0  480.3976    FALSE
19  3        1  486.9402    FALSE
20  3        1  491.5632     TRUE
21  3        1  497.0068     TRUE

这有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.