在 R 中将数据旋转到更宽的一行

Tim*_*cox 3 pivot r dplyr tidyr

这是我正在使用的示例代码

  library(dplyr)

  naics <- c("000000","000000",123000,123000)
  year <- c(2020,2021,2020,2021)
  January <- c(250,251,6,9)
  February <- c(252,253,7,16)
  March <- c(254,255,8,20)

  sample2 <- data.frame (naics, year, January, February, March)
Run Code Online (Sandbox Code Playgroud)

这是预期的结果

                 Jan2020        Feb2020    March2020      Jan2021        Feb2021   March2021   
 000000            250             252          254          251            253           255
 123000             6                7           8            9              16            20
Run Code Online (Sandbox Code Playgroud)

这是用pivot_wider完成的还是更复杂?

akr*_*run 5

我们pivot_wider通过选择values_from月份列names_from作为“年”来使用,然后更改列名称格式,names_glue如果需要,将“naics”转换为行名称column_to_rownames(来自tibble

library(tidyr)
library(tibble)
pivot_wider(sample2, names_from = year, values_from = January:March, 
      names_glue = "{substr(.value, 1, 3)}{year}")%>% 
   column_to_rownames('naics')
Run Code Online (Sandbox Code Playgroud)

-输出

       Jan2020 Jan2021 Feb2020 Feb2021 Mar2020 Mar2021
000000     250     251     252     253     254     255
123000       6       9       7      16       8      20
Run Code Online (Sandbox Code Playgroud)