这是一个非常复杂的,提前抱歉!
我正在尝试连续地在一列中添加列值(CURRENT_FIX_DURATION),并创建一个值为up up的新列,但仅在指定的行内(由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添加#s,并在试验结束时停止求和,并重复下一次试验。
这是我想要实现的示例输出:
CURRENT_FIX_DURATION
462
628
688
806
866
我希望这一点继续,直到它达到TRIAL_INDEX 2,然后重新开始,下一个值的开头不与前一个TRIAL_INDEX的CURRENT_FIX_DURATION列相加。
这有可能实现吗?我虽然使用for循环,但我不知道在数据框中从哪里开始。一般而言,每个主题/试验的数字添加完全可变,这一事实加剧了这一困难。
我应该将其转换为长格式并尝试使用ddply吗?
让我知道您的想法或者您想了解更多信息!
感谢您的时间!
这是使用来自tidyverse
package的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