如何使用 pivot_wide 成多列

how to use pivot_wide into multiple columns

您好,我想根据 3 个变量(列)将一个长数据框转换为一个宽数据框,总共有 6 列。

这里我有一个长数据框的例子如下

dat <- data.frame("time1"=c(6.28,17,49,72,56),
                  "target"=c("A","C","B","C","B"),
                  "day"=c(1,3,2,1,3))

预期结果:

day1.time  day1.target day2.time  day2.target day3.time  day3.target
6.28          A         49           B             17        C  
72            C         NA           NA            56        B

我使用 tidyr 包中的 pivot_wide 尝试了下面的方法。它给了我附加变量而不是我希望的分隔列。不知道有什么建议可以达到预期的效果。

dat %>%  pivot_wider(names_from = c(day,target),
              values_from = time1 ,
              values_fill = NA) 

 A tibble: 1 x 5
  `1_A` `3_C` `2_B` `1_C` `3_B`
  <dbl> <dbl> <dbl> <dbl> <dbl>
1  6.28    17    49    72    56

我也曾尝试根据 target / day 对数据进行子集化,然后使用 pivot_wide,因为你可以猜到 day1.target 等列获胜在那里。原始数据很大,所以我什至无法用 excel (手动)处理它。 如果有任何解决此问题的指示,将不胜感激。 干杯!

names_from 应该是单列,而 values_from 可以来自多列以及我们需要考虑重复行的事实。执行 group_by(day) %>% mutate(rn = row_number()) 或使用 data.table 中的 rowid(day)。因此,可以在执行 pivot_wider

之前创建一个序列列
library(dplyr)
library(tidyr)
library(data.table)
dat %>% 
  mutate( rn = rowid(day)) %>% 
  pivot_wider(names_from = day, values_from = c(time1, target), 
        names_prefix = 'day', names_sep = ".") %>%
  select(-rn)