pivot_longer 按其他列中的匹配项

pivot_longer by match in other column

我有一个类似于以下的数据集,我使用 tidyverse 从两个不同的数据集中争论:

我想要的是 pivot_longer resident_census_total 和 visitor_census_total 到一个名为 'census_totals' 的新列中。但是,我还需要它们匹配适当的状态,例如当状态 == 'Resident' 时,我需要 'census_totals' 列具有来自 resident_census_total 的值,反之亦然。这就是我 运行 遇到麻烦的地方,因为只是使用

pivot_longer(
  cols = c("resident_census_total, "visitor_census_total"),
  names_to = "census_totals"
)

导致两列中的数据简单交替,而不是适当匹配。

下面的虚拟数据框:

dummy <- data.frame(
  location = rep(c("j210", "s34", "q3"), 6),
  day = rep(c("Day 1", "Day 2", "Day 3"), each = 3),
  period = rep(c("2019_fire", "2020_YOY", "2021_YOY"), 6),
  total_agents = c(3585, 1234, 0, 456, 124, 688, 24, 1235, 77, 4578, 357, 124, 
                   2345, 14, 1223, 345, 123, 22),
  Status = rep(c("Resident", "Visitor"), 9),
  resident_census_total = rep(c(127, 345, 1123), 6),
  visitor_census_total = rep(c(0, 266, 456), 6)
) 
)

如果你能提供一个你想要的输出的例子,我们的答案会更准确,那就太好了。

根据你的问题,我猜你想要一列 consensus_totals 来替换 resident_census_totalvisitor_census_total。在这种情况下你真的不需要使用 pivot_longer,只需使用 case_when() 来匹配你的 Status 并输出适当的列。

这是一个 tidyverse 方法:

如果您确定只有两个 Status

,您可以使用 ifelse(Status == "Resident", resident_census_total, visitor_census_total) 替换 case_when()
library(tidyverse)

dummy %>% mutate(census_totals = case_when(Status == "Resident" ~ resident_census_total,
                                           Status == "Visitor" ~ visitor_census_total)) %>% 
  select(-resident_census_total, -visitor_census_total)

输出

   location   day    period total_agents   Status census_totals
1      j210 Day 1 2019_fire         3585 Resident           127
2       s34 Day 1  2020_YOY         1234  Visitor           266
3        q3 Day 1  2021_YOY            0 Resident          1123
4      j210 Day 2 2019_fire          456  Visitor             0
5       s34 Day 2  2020_YOY          124 Resident           345
6        q3 Day 2  2021_YOY          688  Visitor           456
7      j210 Day 3 2019_fire           24 Resident           127
8       s34 Day 3  2020_YOY         1235  Visitor           266
9        q3 Day 3  2021_YOY           77 Resident          1123
10     j210 Day 1 2019_fire         4578  Visitor             0
11      s34 Day 1  2020_YOY          357 Resident           345
12       q3 Day 1  2021_YOY          124  Visitor           456
13     j210 Day 2 2019_fire         2345 Resident           127
14      s34 Day 2  2020_YOY           14  Visitor           266
15       q3 Day 2  2021_YOY         1223 Resident          1123
16     j210 Day 3 2019_fire          345  Visitor             0
17      s34 Day 3  2020_YOY          123 Resident           345
18       q3 Day 3  2021_YOY           22  Visitor           456

您的数据集供参考

  location   day    period total_agents   Status resident_census_total visitor_census_total
1      j210 Day 1 2019_fire         3585 Resident                   127                    0
2       s34 Day 1  2020_YOY         1234  Visitor                   345                  266
3        q3 Day 1  2021_YOY            0 Resident                  1123                  456
4      j210 Day 2 2019_fire          456  Visitor                   127                    0
5       s34 Day 2  2020_YOY          124 Resident                   345                  266
6        q3 Day 2  2021_YOY          688  Visitor                  1123                  456
7      j210 Day 3 2019_fire           24 Resident                   127                    0
8       s34 Day 3  2020_YOY         1235  Visitor                   345                  266
9        q3 Day 3  2021_YOY           77 Resident                  1123                  456
10     j210 Day 1 2019_fire         4578  Visitor                   127                    0
11      s34 Day 1  2020_YOY          357 Resident                   345                  266
12       q3 Day 1  2021_YOY          124  Visitor                  1123                  456
13     j210 Day 2 2019_fire         2345 Resident                   127                    0
14      s34 Day 2  2020_YOY           14  Visitor                   345                  266
15       q3 Day 2  2021_YOY         1223 Resident                  1123                  456
16     j210 Day 3 2019_fire          345  Visitor                   127                    0
17      s34 Day 3  2020_YOY          123 Resident                   345                  266
18       q3 Day 3  2021_YOY           22  Visitor                  1123                  456