在R(dplyr)中重置的条件运行计数(累积总和)

时间:2018-10-24 02:41:18

标签: r dplyr conditional cumulative-sum

我正在尝试计算以其他变量为条件的运行计数(即累计总和),并且可以针对其他变量的特定值进行重置。我正在R中工作,并且在可能的情况下希望使用基于dplyr的解决方案。

我想根据以下算法为运行计数cumulative创建一个变量:

  • cumulativeid的组合中计算运行计数(age
  • 每个后续cumulative的运行计数(trial)加1,其中accuracy = 0block = 2condition = 1
  • cumulativetrialaccuracy = 1的每个block = 2的运行计数(condition = 1)重置为0,下一个增量恢复为1(不是以前的号码)
  • 对于每个trialblock != 2的{​​{1}},将运行计数(condition != 1)保留为cumulative

这是一个最小的工作示例:

NA

预期输出为:

mydata <- data.frame(id = c(1,1,1,1,1,1,1,1,1,1,1),
                 age = c(1,1,1,1,1,1,1,1,1,1,2),
                 block = c(1,1,2,2,2,2,2,2,2,2,2),
                 trial = c(1,2,1,2,3,4,5,6,7,8,1),
                 condition = c(1,1,1,1,1,2,1,1,1,1,1),
                 accuracy = c(0,0,0,0,0,0,0,1,0,0,0)
)

id  age block   trial   condition   accuracy
1   1   1       1       1           0
1   1   1       2       1           0
1   1   2       1       1           0
1   1   2       2       1           0
1   1   2       3       1           0
1   1   2       4       2           0
1   1   2       5       1           0
1   1   2       6       1           1
1   1   2       7       1           0
1   1   2       8       1           0
1   2   2       1       1           0

2 个答案:

答案 0 :(得分:2)

我们可以使用case_when根据条件分配所需的值。然后,我们使用group_by添加一个附加的cumsum条件,以在temp列为0时切换值。在最后的mutate步骤中,我们暂时replace {{1} }中的NA值设为0,然后将temp放在其上,然后再将cumsum值放回原处以获取最终输出。

NA

答案 1 :(得分:2)

这里是使用data.table的选项。根据{{​​1}}的{​​accuracy”,“ block”,“ condition”和自定义值的match d个值创建一个二进制列,并按二进制列的run-length-id分组('ind'),'id'和'age',获取'ind'的累积总和并将其分配(paste)到新列('Cumulative')

:=