【问题标题】:dplyr `pivot_longer()` object not found but it's right there?dplyr `pivot_longer()` 对象未找到,但它就在那里?
【发布时间】:2020-02-28 22:17:16
【问题描述】:
library(tidyverse)
df <- tibble(Date = as.Date(c("2020-01-01", "2020-01-02")),
             Shop = c("Store A", "Store B"),
             Employees = c(5, 10),
             Sales = c(1000, 3000))

#> # A tibble: 2 x 4
#>   Date       Shop    Employees Sales
#>   <date>     <chr>       <dbl> <dbl>
#> 1 2020-01-01 Store A         5  1000
#> 2 2020-01-02 Store B        10  3000

dplyr reference guide 之后,我正在从 dplyr spread/gather 切换到 pivot_*。我想通过以下方式收集“员工”和“销售”列:

df %>% pivot_longer(-Date, -Shop, names_to = "Names", values_to = "Values")
#> Error in build_longer_spec(data, !!cols, names_to = names_to, 
#> values_to = values_to, : object 'Shop' not found

但是我收到了这个错误。好像我做的一切都是正确的。除了我显然不是。你知道出了什么问题吗?

【问题讨论】:

  • 我不太明白你想要什么,但是是这个吗?:df %&gt;% pivot_longer(-c(Date, Shop), names_to = "Names", values_to = "Values")

标签: r dplyr


【解决方案1】:

cols 参数是您要旋转的所有列。您可以将其视为来自reshape2::meltid.vars 参数的补充

df %>% pivot_longer(-c(Date, Shop), names_to = "Names", values_to = "Values")

同:

reshape2::melt(df, id.vars=c("Date", "Shop"), variable.name="Names", value.name="Value")

【讨论】:

    【解决方案2】:

    我认为更清晰的语法是

    df %>% 
          pivot_longer(cols = c(Employees, Sales))
    

    与编写要删除的列相反。

    names_to = "Names", values_to = "Values"
    

    只是将namevalue的默认新列名大写

    【讨论】:

      猜你喜欢
      • 2013-07-29
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多