代码之家  ›  专栏  ›  技术社区  ›  Tim Wilcox

如何最好地取消堆栈并生成一个长数据字符串

  •  0
  • Tim Wilcox  · 技术社区  · 4 年前

    下面是示例数据和期望的结果。是的,我知道有四列没有列在所需的输出中。这只是为了保持简单。如果我能创建前四个,那么接下来的四个就没那么糟糕了。关于如何实现这一点有什么想法吗?我的第一次尝试是更广泛地使用pivot_,但很难获得有年份和月份可创建的列名。

     state <- c(32,32,32,32,32,32,32,32)
     indcode <-c(44,44,44,44,45,45,45,45)
     area <-c("000000","000000","000000","000000","000000","000000","000000","000000")
     areatype <-c("01","01","01","01","01","01","01","01")
     ownership <-c("00","00","00","00","00","00","00","00")
     periodyear  <-c(2018,2019,2020,2021,2018,2019,2020,2021)
     January <- c(44,90,45,91,46,92,48,96)
     February <- c(44,91,46,91,48,92,49,99)
    
    
     example <- data.frame(state,indcode,area,areatype,ownership,periodyear,January,February)
    
    
     state      indcode      area    areatype     ownership     2018m1     2018m2   2019m1    2019 m2    
     32            44       000000      01            00           44         44       90         91          
     32            45       000000      01            00           46         48       92        92     
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Jon Spring    4 年前
    library(tidyverse)
    example %>%
      pivot_longer(January:February, names_to = "month") %>%
      mutate(mo_num = match(month, month.name)) %>%
      mutate(col_name = paste(periodyear, mo_num, sep = "m")) %>%
      select(-periodyear, -month, -mo_num) %>%
      pivot_wider(names_from = col_name, values_from = value)
    

    后果

    # A tibble: 2 x 13
      state indcode area   areatype ownership `2018m1` `2018m2` `2019m1` `2019m2` `2020m1` `2020m2` `2021m1` `2021m2`
      <dbl>   <dbl> <chr>  <chr>    <chr>        <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
    1    32      44 000000 01       00              44       44       90       91       45       46       91       91
    2    32      45 000000 01       00              46       48       92       92       48       49       96       99
    
    推荐文章