tidyr中的gather(),两种不同的代码,一种是正确的,一种是错误的

问题描述

devtools::install_github("rstudio/EDAWR")
library(EDAWR)
gather(population,key="year",value="population",`1995`:`2013`)
Error: Can't subset columns that don't exist.
x Column `1995` doesn't exist.
Run `rlang::last_error()` to see where the error occurred.

gather(EDAWR::population,`1995`:`2013`)

我写信问为什么第一个代码不正确,而第二个代码正确? 顺便说一句,符号 EDAWR::population 是否与 population 相同?

解决方法

对我来说,这两个代码的工作方式相同。我猜您收到错误的原因是因为您的全局环境中有一个名为 population 的数据框,其中不存在列 1995。

例如,如果我创建一个名为 population 的临时数据帧,我可以重现相同的错误。

population <- data.frame(a = 1:5)
gather(population,key="year",value="population",`1995`:`2013`)

错误:不能对不存在的列进行子集化。 x 列 1995 不存在。

这里的 population 数据帧是我们创建的只有一列 (a) 的数据帧,因此,我们得到了错误。使用 EDAWR::population 是指来自 EDAWR 包的数据帧。

使用 poulation 删除 rm(population) 数据框,我认为这两个代码应该以相同的方式工作。此外,gather 现已停用并替换为 pivot_longer