【问题标题】:How do I pivot columns?如何旋转列?
【发布时间】:2021-10-09 17:04:33
【问题描述】:

我在 Excel 文件中发现了这个数据框,非常杂乱无章。这只是一个更大数据集的样本,包含许多作业。

df <- data.frame(
  Job = c("Frequency", "Driver", "Operator"),
  Gloves = c("Daily", 1,2),
  Aprons = c("Weekly", 2,0),
)

视觉上是

我需要它是这种格式,我可以在数据库中工作:

df <- data.frame(
  Job = c("Driver", "Driver", "Operator", "Operator"),
  Frequency= c("Daily", "Weekly", "Daily", "Weekly"),
  Item= c("Gloves", "Aprons", "Gloves", "Aprons"),
  Quantity= c(1,2,2,0)
)

视觉上是

对于我们必须如何处理数据有什么想法吗?我试过了,没有运气。

【问题讨论】:

    标签: r excel data-manipulation columnsorting


    【解决方案1】:

    我们可以通过三个步骤来使用tidyverse 方法

    1. 删除第一行 - slice(-1),重塑为“长”格式 (pivot_longer)
    2. 只保留第一行 - slice(1),重塑为“长”格式 (pivot_longer)
    3. 对两个重构后的数据集进行连接
    library(dplyr)
    library(tidyr)
    df %>% 
       slice(-1) %>%
       pivot_longer(cols = -Job, names_to = 'Item', 
           values_to = 'Quantity') %>%
        left_join(df %>%
             slice(1) %>% 
             pivot_longer(cols= -Job, values_to = 'Frequency',
                names_to = 'Item') %>% 
            select(-Job) )
    

    -输出

    # A tibble: 4 x 4
      Job      Item   Quantity Frequency
      <chr>    <chr>  <chr>    <chr>    
    1 Driver   Gloves 1        Daily    
    2 Driver   Aprons 2        Weekly   
    3 Operator Gloves 2        Daily    
    4 Operator Aprons 0        Weekly   
    

    数据

    df <- data.frame(
      Job = c("Frequency", "Driver", "Operator"),
      Gloves = c("Daily", 1,2),
      Aprons = c("Weekly", 2,0))
    

    【讨论】:

    • 嗨。我收到此错误:UseMethod("slice_") 中的错误:没有适用于“slice_”的方法应用于“函数”类的对象
    • @user284437 我看到您在代码中将数据框分配给了df。你能在控制台中输入df
    • @user284437 问题是,如果你在这篇文章中只构造了df,而会话中没有对象,那么df默认是stats包中的一个函数跨度>
    • 是的,上面写着: > df function (x, df1, df2, ncp, log = FALSE) { if (missing(ncp)) .Call(C_df, x, df1, df2, log) else .Call(C_dnf, x, df1, df2, ncp, log) }
    • @user284437 我现在明白这个问题了。您尝试使用该代码创建df,但如果您检查代码,最后有一个,,这会导致创建数据集时出错,因此您的环境中从未形成“df”跨度>
    猜你喜欢
    • 2011-03-08
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2016-08-30
    相关资源
    最近更新 更多