【问题标题】:Go from long to wide using tidyr's pivot_wider使用 tidyr 的 pivot_wider 从长到宽
【发布时间】:2020-11-21 05:23:24
【问题描述】:

我有一个简单的长 df,其中 fi 列中的每个元素都应该是宽 df 中的一个新列。所以新的 df 应该有 10 列 A:J。宽 df 应该有两行,“一”和“二”。

听起来像是 pivot_wider 的工作,但我无法让它发挥作用。

library("tidyverse")

df <- structure(list(fi = c("A", "B", "C", "D", "E", "F", "G", "H", 
                            "I", "J"), one = c(0.5, 1.4, 0.89, 1.4, 1.45, 1.25, 1.45, 1.4, 
                                               1.4, 1.5), two = c(0.75, 1.6, 1.05, 1.6, 1.45, 1.05, 1.65, 1.5, 
                                                                  1.55, 1.65)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
                                                                                                                   "data.frame"))
df

# Not it
df %>% 
  pivot_wider(names_from = fi, values_from = c(one, two))

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    先获取长格式数据,使onetwo的值在同一列,然后再转换成宽格式。

    library(tidyr)
    
    df %>%
      pivot_longer(cols = -fi) %>%
      pivot_wider(names_from = fi, values_from = value)
    
    # name      A     B     C     D     E     F     G     H     I     J
    #  <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    #1 one    0.5    1.4  0.89   1.4  1.45  1.25  1.45   1.4  1.4   1.5 
    #2 two    0.75   1.6  1.05   1.6  1.45  1.05  1.65   1.5  1.55  1.65
    

    data.table

    library(data.table)
    setDT(df)
    dcast(melt(df, id.vars = 'fi'), variable ~fi, value.var = 'value')
    

    【讨论】:

      【解决方案2】:

      我们可以使用recast

      library(reshape2)
      recast(df, id.var = 'fi', variable ~ fi)
      

      -输出

      #  variable    A   B    C   D    E    F    G   H    I    J
      #1      one 0.50 1.4 0.89 1.4 1.45 1.25 1.45 1.4 1.40 1.50
      #2      two 0.75 1.6 1.05 1.6 1.45 1.05 1.65 1.5 1.55 1.65
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 2021-07-24
        • 2016-03-17
        • 2020-10-15
        • 2020-06-18
        相关资源
        最近更新 更多