【问题标题】:Reshaping multiple long columns into wide column format in R在R中将多个长列重塑为宽列格式
【发布时间】:2021-10-06 03:26:54
【问题描述】:

我的示例数据集有多个我想转换为宽格式的列。我曾尝试使用 dcast 功能,但出现错误。以下是我的示例数据集:

df2 = data.frame(emp_id = c(rep(1,2), rep(2,4),rep(3,3)), 
                 Name = c(rep("John",2), rep("Kellie",4), rep("Steve",3)),
                 Year = c("2018","2019","2018","2018","2019","2019","2018","2019","2019"),
                 Type = c(rep("Salaried",2), rep("Hourly", 2), rep("Salaried",2),"Hourly",rep("Salaried",2)),
                 Dept = c("Sales","IT","Sales","Sales", rep("IT",3),rep("Sales",2)),
                 Salary = c(100,1000,95,95,1500,1500,90,1200,1200))

我希望我的输出看起来像:

【问题讨论】:

    标签: r tidyr reshape2 melt dcast


    【解决方案1】:

    你觉得这个输出怎么样?这不是预期的输出,但不知何故我发现解释数据更容易??

    df2 %>% 
        group_by(Name, Year, Type, Dept) %>% 
        summarise(mean = mean(Salary))
    

    输出:

      Name   Year  Type     Dept   mean
      <chr>  <chr> <chr>    <chr> <dbl>
    1 John   2018  Salaried Sales   100
    2 John   2019  Salaried IT     1000
    3 Kellie 2018  Hourly   Sales    95
    4 Kellie 2019  Salaried IT     1500
    5 Steve  2018  Hourly   IT       90
    6 Steve  2019  Salaried Sales  1200
    

    【讨论】:

      【解决方案2】:

      一个选项是tidyr 包中的函数pivot_wider()

      df.wide <- tidyr::pivot_wider(df2,
                                    names_from = c("Type", "Dept", "Year"),
                                    values_from = "Salary",
                                    values_fn = {mean})
      

      这应该会得到你想要的结果。

      【讨论】:

        猜你喜欢
        • 2013-03-18
        • 2012-09-10
        • 2020-05-01
        • 2019-11-22
        • 1970-01-01
        • 2019-06-13
        • 2022-07-28
        相关资源
        最近更新 更多