dplyr `pivot_longer()` object not found but it's right there?

。_饼干妹妹 提交于 2021-01-29 14:44:03

问题


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

I'm switching from dplyr spread/gather to pivot_* following the dplyr reference guide. I want to gather the "Employees" and "Sales" columns in the following manner:

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

But I'm getting this error. It seems as though I'm doing everything right. Except that I'm apparently not. Do you know what went wrong?


回答1:


The cols argument is all of the columns you want to pivot. You can think of it as the complement of the id.vars argument from reshape2::melt

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

same as:

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



回答2:


I think a clearer syntax would be

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

As opposed to writing the columns you want to drop.

names_to = "Names", values_to = "Values"

Is just going to capitalize the default new column names of name and value



来源:https://stackoverflow.com/questions/60459953/dplyr-pivot-longer-object-not-found-but-its-right-there

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!