这是一个非常复杂的操作,对不起!
我尝试连续地在一列中添加列值(CURRENT_FIX_DURATION),并创建一个新列,其值递增,但仅在指定的行内(由TRIAL_INDEX指定,在1-160中,在ID中,有75个独立ID) )。
这是我数据框的一部分:
ID TRIAL_INDEX CURRENT_FIX_DURATION CURRENT_FIX_INDEX
1 bb10jml2 1 462 1
2 bb10jml2 1 166 2
3 bb10jml2 1 60 3
4 bb10jml2 1 118 4
5 bb10jml2 1 60 5
CURRENT_FIX_INTEREST_AREA_INDEX
1 5
2 3
3 .
4 4
5 .
每个试验有160个试验,还有75个独立的ID,并在CURRENT_FIX_DURATION列中添加了不同数量的数字。
我希望能够将CURRENT_FIX_DURATION的#加起来,并且求和在试验结束时停止,并在下一个试验中重复。
以下是我想要实现的示例输出:
CURRENT_FIX_DURATION
462
628
688
806
866
我希望这种情况继续下去,直到达到TRIAL_INDEX 2,然后从下一个值的开头开始,而不是与上一个TRIAL_INDEX的CURRENT_FIX_DURATION列求和。
这有可能实现吗?我虽然使用for循环,但是我不确定在数据帧中从哪里开始。 通常,由于每个受试者/试验要增加的数字完全可变,这一事实使问题更加复杂。
我应该将其转换为长格式并尝试ddply吗?
让我知道您的想法,或者您想了解更多信息!
谢谢您的时间!
答案 0 :(得分:1)
这是tidyverse
包中的map2
中的purrr
内部解决方案。
library(tidyverse)
mydata <- tibble(id = rep("a", 5), trial_index = rep(1, 5),
current_fix_duration = c(462, 166, 60, 118, 60),
current_fix_index = 1:5)
newdata <- mydata %>% group_by(id) %>%
mutate(current_fix_duration2 = map2_dbl(trial_index, current_fix_index, ~sum(current_fix_duration[.x:.y]))) %>%
as.data.frame()
# A tibble: 5 x 5
# Groups: id [1]
id trial_index current_fix_duration current_fix_index current_fix_duration2
<chr> <dbl> <dbl> <int> <dbl>
1 a 1 462 1 462
2 a 1 166 2 628
3 a 1 60 3 688
4 a 1 118 4 806
5 a 1 60 5 866