R语言 如何对某些列 ID 中的值列连续逐行求和?



这是一个相当复杂的问题,对不起,提前!

我正在尝试连续(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包中的map2tidyverse内的解决方案。

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

最新更新