【问题标题】:pivot_wider combining information on the same row [duplicate]pivot_wider 在同一行上组合信息[重复]
【发布时间】:2021-01-18 00:00:01
【问题描述】:

我想使用pivot_wider 为单个日期创建一个宽列表。

一个变量有 8 个不同的组,但另一个变量是一个总和。

数据是这样的:

df <- data.frame(
  stringsAsFactors = FALSE,
  date = c("09/01/2020","09/01/2020",
           "09/01/2020","09/01/2020","09/01/2020","09/01/2020",
           "09/01/2020","09/01/2020"),
  x = letters[1:8],
  y = c(34L, 34L, 74L, 50L, 64L, 19L, 25L, 21L),
  z = c(42L, 210L, 284L, 145L, 125L, 77L, 70L, 70L)
)

当使用 pivot_wider 时,它会创建 7 行而不是 8 行,因为 y 的前两个观察值是 34,如下所示

df %>% 
  pivot_wider(names_from = x, values_from = z, values_fill = 0)

而预期的输出是

【问题讨论】:

    标签: r dplyr tidyverse tidyr


    【解决方案1】:

    在使用pivot_wider 时,它会将y 列作为id 变量,因此行被合并。给每一行一个单独的 id,然后获取宽格式的数据。

    library(dplyr)
    
    df %>%
      mutate(row = row_number()) %>%
      tidyr::pivot_wider(names_from = x, values_from = z, values_fill = 0) %>%
      select(-row)
    
    #  date           y     a     b     c     d     e     f     g     h
    #  <chr>      <int> <int> <int> <int> <int> <int> <int> <int> <int>
    #1 09/01/2020    34    42     0     0     0     0     0     0     0
    #2 09/01/2020    34     0   210     0     0     0     0     0     0
    #3 09/01/2020    74     0     0   284     0     0     0     0     0
    #4 09/01/2020    50     0     0     0   145     0     0     0     0
    #5 09/01/2020    64     0     0     0     0   125     0     0     0
    #6 09/01/2020    19     0     0     0     0     0    77     0     0
    #7 09/01/2020    25     0     0     0     0     0     0    70     0
    #8 09/01/2020    21     0     0     0     0     0     0     0    70
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多