我正在尝试计算以其他变量为条件的运行计数(即累计总和),并且可以针对其他变量的特定值进行重置。我正在R中工作,并且在可能的情况下希望使用基于dplyr
的解决方案。
我想根据以下算法为运行计数cumulative
创建一个变量:
cumulative
和id
的组合中计算运行计数(age
)cumulative
的运行计数(trial
)加1,其中accuracy = 0
,block = 2
和condition = 1
cumulative
,trial
和accuracy = 1
的每个block = 2
的运行计数(condition = 1
)重置为0,下一个增量恢复为1(不是以前的号码)trial
或block != 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
答案 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')
:=