I have the following data frame:
library(tidyverse)
dat <- tribble(
~Scenario, ~V1, ~V2, ~V3, ~V4,
1, 0.97, 0.46, 0.79, 0.25,
1, 0.21, 0.45, 0.23, 0.63,
1, 0.95, 0.97, 0.07, 0.61,
1, 0.93, 0.79, 0.23, 0.86,
2, 0.22, 0.01, 0.42, 0.47,
2, 0.71, 0.17, 0.16, 0.88,
3, 0.73, 0.38, 0.10, 0.77,
3, 0.49, 0.37, 0.90, 0.52,
3, 0.99, 0.71, 0.66, 0.05,
3, 0.72, 0.75, 0.69, 0.01,
3, 0.15, 0.87, 0.12, 0.02,
4, 0.94, 0.30, 0.91, 0.99)
我正在为这个数据添加四列新的内容,其中每一列新的内容都代表了每个V1:V4列根据Scenario
分组求和的结果:
dat_new <- dat %>%
group_by(Scenario) %>%
mutate_at(vars(-group_cols()), .funs = list(sum = sum))
现在我想将这些数据转换为长格式,其中一组是我的V1:V4列,另一组是我的V1_sum:V4_sum列。普通的 pivot_longer
不起作用,因为它只接受一个值列,然而我需要两个。
在tidyverse参考文献中(底部示例),我找到了一个可能的解决方案,但我无法定义正确的names_pattern
。https://tidyr.tidyverse.org/reference/pivot_longer.html
是否有一种简单直接的方法(理想情况下是tidyverse),可以处理这两个pivot_longer集合?感觉这是重新塑造数据集时的基本任务之一,但我无法让其正常工作。
期望输出:
Scenario set V sum
1 1 0.97 3.06
1 2 0.46 2.67
1 3 0.79 1.32
1 4 0.25 2.35
...
4 4 0.99 0.99
注意:“set”、“V”和“sum”列名仅为示例,如果其他列名更容易动态生成,则我也可以接受其他列名。