【问题标题】:How to pivot_longer this dataframe?如何pivot_longer这个数据框?
【发布时间】:2021-02-04 13:43:34
【问题描述】:

我有一个具有以下结构的数据框:

x <- data.frame(
x1_dte = as.Date(c("2001-01-01", "2001-01-02", "2002-01-02"), format = "%Y-%m-%d"),
x1_val1 = c(10, 12, 13),
x1_val2 = c(200, 250, 300),
x2_dte = as.Date(c("2003-01-01", "2003-04-02", "2003-04-02"), format = "%Y-%m-%d"),
x2_val1 = c(9, 11, 14),
x2_val2 = c(110, 140, 200),
x3_dte = as.Date(c(NA, NA, NA), format = "%Y-%m-%d"),
x3_val1 = c(NA, NA, NA),
x3_val2 = c(NA, NA, NA)
)

      x1_dte x1_val1 x1_val2     x2_dte x2_val1 x2_val2 x3_dte x3_val1 x3_val2
1 2001-01-01      10     200 2003-01-01       9     110   <NA>      NA      NA
2 2001-01-02      12     250 2003-04-02      11     140   <NA>      NA      NA
3 2002-01-02      13     300 2003-04-02      14     200   <NA>      NA      NA

我想将其转换为具有以下结构的数据框:

x_longer <- data.frame(var = c("x1", "x1", "x1", "x2", "x2", "x2","x3", "x3", "x3"),
date = as.Date(c("2001-01-01", "2001-01-02", "2002-01-02", "2003-01-01", "2003-04-02", "2003-04-02", NA, NA, NA), format = "%Y-%m-%d"),
val1 = c(10, 12, 13, 9, 11, 14, NA, NA, NA),
val2 = c(200, 250, 300, 110, 140, 200, NA, NA, NA)
)

  var       date val1 val2
1  x1 2001-01-01   10  200
2  x1 2001-01-02   12  250
3  x1 2002-01-02   13  300
4  x2 2003-01-01    9  110
5  x2 2003-04-02   11  140
6  x2 2003-04-02   14  200
7  x3       <NA>   NA   NA
8  x3       <NA>   NA   NA
9  x3       <NA>   NA   NA

我不明白如何从数据框x 中获取多个列来创建x_longer。谁能帮帮我?

【问题讨论】:

    标签: r tidyverse tidyr


    【解决方案1】:

    这行得通:

    x %>% pivot_longer(everything(), names_to = c('var', '.value'), names_sep = '_')
    

    【讨论】:

      【解决方案2】:
      x %>%
        pivot_longer(everything(),
                     names_to = c("var", ".value"),
                     names_pattern = c("^(x[0-9]+)_(.*)")) %>%
        rename(date = "dte") %>%
        arrange(var, date)
      # # A tibble: 9 x 4
      #   var   date        val1  val2
      #   <chr> <date>     <dbl> <dbl>
      # 1 x1    2001-01-01    10   200
      # 2 x1    2001-01-02    12   250
      # 3 x1    2002-01-02    13   300
      # 4 x2    2003-01-01     9   110
      # 5 x2    2003-04-02    11   140
      # 6 x2    2003-04-02    14   200
      # 7 x3    NA            NA    NA
      # 8 x3    NA            NA    NA
      # 9 x3    NA            NA    NA
      

      【讨论】:

        猜你喜欢
        • 2022-08-15
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多