【问题标题】:Pivot wider with tidyverse使用 tidyverse 更广泛地旋转
【发布时间】:2021-06-10 11:32:02
【问题描述】:

我有一个像这个示例数据这样的长日期集

df <-  tibble::tribble(
      ~V1,    ~V2,      ~V3,
       1L,  "Hig", 3131000L,
       2L,  "Hig",  279000L,
       3L,  "Hig", 1316000L,
       1L, "val", 1882000L,
       2L, "val", 1433000L,
       3L, "val",  555000L,
       4L, "val",  856000L,
       1L,  "nt", 4493000L,
       2L,  "nt",  233000L,
       3L,  "nt",  693000L
      ) 

我想在不考虑 V1 变量和 cols 名称的情况下将其更改为宽格式。想要的输出应该是这样的(导出为txt文件)

High,3131000,279000,1316000,
val,1882000,1433000,555000,856000,
nt,4493000,233000,693000,

我只是尝试过这个

    df %>% 
      select(V2, V3) %>% 
      pivot_wider("V2",  values_from="V3" ) 

Error: Column 1 must be named.
Use .name_repair to specify repair.

【问题讨论】:

    标签: r dplyr tidyverse tidyr


    【解决方案1】:

    问题是您需要从某个地方获取列名。

    你可以这样做

    library(tidyverse)
    
    df <-  tibble::tribble(
      ~V1,    ~V2,      ~V3,
      1L,  "Hig", 3131000L,
      2L,  "Hig",  279000L,
      3L,  "Hig", 1316000L,
      1L, "val", 1882000L,
      2L, "val", 1433000L,
      3L, "val",  555000L,
      4L, "val",  856000L,
      1L,  "nt", 4493000L,
      2L,  "nt",  233000L,
      3L,  "nt",  693000L
    ) 
    
    df %>%
      select(V2, V3) %>%
      group_by(V2) %>%
      mutate(temp = row_number()) %>%
      pivot_wider(id_cols = V2, names_from=temp, values_from = V3)
    

    这会给你

    # A tibble: 3 x 5
    # Groups:   V2 [3]
      V2        `1`     `2`     `3`    `4`
      <chr>   <int>   <int>   <int>  <int>
    1 Hig   3131000  279000 1316000     NA
    2 val   1882000 1433000  555000 856000
    3 nt    4493000  233000  693000     NA
    

    【讨论】:

      【解决方案2】:

      由于输出中的行长度不同,我不会使用dplyrpivot_ 函数。它们最好在表格格式中使用。

      相反,您可以通过V2paste 该名称以及来自V3 的值来split 您的数据。最后,将结果写入文件output.txt,如下所示:

      library(purrr)
      
      split(df, ~V2) %>%
        imap_chr(~ paste(c(.y, .x$V3, ""), collapse = ",")) %>%
        cat(file = "output.txt", sep = "\n")
      

      output.txt 中的结果:

      file.show("output.txt")
      
      Hig,3131000,279000,1316000,
      nt,4493000,233000,693000,
      val,1882000,1433000,555000,856000,
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        相关资源
        最近更新 更多