r - 两组列的平行 pivot_longer

标签 r pivot reshape tidyr

我有以下数据框:

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)

我向该数据添加了四个新列,其中每个新列代表按 Scenario 分组的每个 V1:V4 列的总和。 :
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 集?感觉这是 reshape 数据集时的基本任务之一,但我无法让它工作。

预期输出:
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”只是示例,如果其他列名更容易即时生成,我也可以。

最佳答案

也许你应该在计算总和之前尝试旋转:

dat %>% pivot_longer(., -Scenario, names_to = "V", values_to = "Value") %>% 
  group_by(Scenario, V) %>%
  mutate(Sum = sum(Value))


# A tibble: 48 x 4
# Groups:   Scenario, V [16]
   Scenario V     Value   Sum
      <dbl> <chr> <dbl> <dbl>
 1        1 V1     0.97  3.06
 2        1 V2     0.46  2.67
 3        1 V3     0.79  1.32
 4        1 V4     0.25  2.35
 5        1 V1     0.21  3.06
 6        1 V2     0.45  2.67
 7        1 V3     0.23  1.32
 8        1 V4     0.63  2.35
 9        1 V1     0.95  3.06
10        1 V2     0.97  2.67
# … with 38 more rows

这是您要找的吗?

关于r - 两组列的平行 pivot_longer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253987/

相关文章:

R:将数据框中的数据转换为列

r - 如何在R中的一个区间内计算 'number of values of a particular variable of a tibble'?

r - 组合不相等的数据帧并应用计算

r - 如何对字符向量的每个元素中的字符进行排序?

sql - SQL中按年份并排比较数据

mysql - 通过 SQL 查询重新配置行中的表列数据

mysql - 如何在 MySQL 中返回数据透视表输出?

R包在批处理模式下不可用

r - 在多列上使用 tidyr 的 pivot_wider 的问题

python - reshape Pandas 数据框堆栈/取消堆栈