我有以下数据框:
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集?感觉这是重塑数据集时的基本任务之一,但我无法使其正常工作。
预期输出:
列名“ set”,“ V”和“ sum”仅是示例,如果其他列名更容易即时生成,我也很满意。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
[[注:
我有以下数据框:library(tidyverse)dat
也许您应该在计算总和之前尝试进行透视:
dat %>% group_by(Scenario) %>%
pivot_longer(., -Scenario, names_to = "V", values_to = "Value") %>%
mutate(Sum = sum(Value))
# A tibble: 48 x 4
# Groups: Scenario [4]
Scenario V Value Sum
<dbl> <chr> <dbl> <dbl>
1 1 V1 0.97 9.4
2 1 V2 0.46 9.4
3 1 V3 0.79 9.4
4 1 V4 0.25 9.4
5 1 V1 0.21 9.4
6 1 V2 0.45 9.4
7 1 V3 0.23 9.4
8 1 V4 0.63 9.4
9 1 V1 0.95 9.4
10 1 V2 0.97 9.4
# … with 38 more rows