这感觉像是一个基本的问题,因为我似乎不知道如何做到这一点。我想在执行计算后在数据框中插入一个新行,然后为每个参与者循环该过程(计算和插入输出行)。
我的数据框架看起来像这样(共有9名受试者),其中每个受试者有8个治疗前后结果:
| subID | treatment | outcome |
| ----- | ---------------------------- | ------- |
| 14325 | affected_pre_1 | 0.45 |
| 14325 | affected_pre_2 | 0.25 |
| 14325 | unaffected_pre_1 | 1.05 |
| 14325 | unaffected_pre_2 | 1.23 |
| 14325 | affected_post_1 | 0.22 |
| 14325 | affected_post_2 | 0.45 |
| 14325 | unaffected_post_1 | 0.87 |
| 14325 | unaffected_post_2 | 0.34 |
| 18964 | affected_pre_1 | 0.90 |
| 18964 | affected_pre_2 | 1.13 |
| 18964 | unaffected_pre_1 | 0.55 |
| 18964 | unaffected_pre_2 | 0.23 |
| 18964 | affected_post_1 | 0.17 |
| 18964 | affected_post_2 | 1.22 |
| 18964 | unaffected_post_1 | 1.89 |
| 18964 | unaffected_post_2 | 0.76 |
| 39274 | affected_pre_1 | 0.88 |
| 39274 | affected_pre_2 | 0.12 |
| 39274 | unaffected_pre_1 | 0.05 |
| 39274 | unaffected_pre_2 | 0.34 |
| 39274 | affected_post_1 | 0.99 |
| 39274 | affected_post_2 | 0.32 |
| 39274 | unaffected_post_1 | 1.81 |
| 39274 | unaffected_post_2 | 1.34 |
| ... | ... | ... |
我想用以下计算为每个主题创建4个新行(基本上规范化了一些度量):
row 1 = affected_pre_2 / affected_pre_1
row 2 = unaffected_pre_2 / unaffected_pre_1
row 3 = affected_post_2 / affected_post_1
row 4 = unaffected_post_2 / unaffected_post_1
根据之前的答案,我尝试了以下方法:
data %>%
bind_rows(data %>% summarise(subID = str_c(subID, lead(subID), sep = '_')) %>% na.omit() %>%
bind_cols(data %>% summarise(across(5:11, ~ . - lead(.))) %>% na.omit()))
交叉(5:11...)指的是我拥有的多个结果变量(在我的示例数据集中,为了简单起见,我只包含了一个结果变量)。
然而,我得到了一个警告,summarise()被弃用了--有没有更好的方法来做到这一点?
我 * 认为 * 我可能还需要在其中的某个地方使用apply函数,但我不确定如何在每个主题中循环所有内容。任何帮助都将非常感谢!
2条答案
按热度按时间8mmmxcuj1#
我认为pivot/mutate/pivot在这里应该可以很好地工作:
qfe3c7zg2#
就像这样: