这是一个相当复杂的问题,对不起,提前!
我正在尝试连续(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的 #s 相加,求和在试验结束时停止,并在下一次试验中重复。
以下是我想要实现的示例输出:
CURRENT_FIX_DURATION
462
628
688
806
866
我希望这种情况一直持续到它达到 TRIAL_INDEX 2,然后重新开始,下一个值的开头不与前一个TRIAL_INDEX的CURRENT_FIX_DURATION列相加。
这有可能实现吗?我虽然使用 for 循环,但我不确定在数据框中从哪里开始。 一般来说,每个受试者/试验要添加的数字是完全可变的,这一事实使困难更加复杂。
我应该将其转换为长格式并尝试使用 ddply 吗?
让我知道您的想法,或者您是否想了解更多信息!
谢谢你的时间!
这是使用purrr
包中的map2
在tidyverse
内的解决方案。
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