枢轴更长的包机标题

Pivot Longer charter headings

我有以下列名称的数据集

[1] "OdName" "AreaName" "RegName" "DevName" "1980" "1981"
[7] "1982" "1983" "1984" "1985" "1986" "1987"
[13] "1988" "1989" "1990" "1991" "1992" "1993"
[19] "1994" "1995" "1996" "1997" "1998" "1999"
[25] "2000" "2001" "2002" "2003" "2004" "2005"
[31] "2006" "2007" "2008" "2009" "2010" "2011"
[37] "2012" "2013"

从我需要将所有年份列转换为一个列“年”的角度来看,有一个更长的转换问题。如果列标题用数字就容易了。

pivot_longer(
cols =c(1980:2013),
names_to = "Years",
values_to = "Count")

所以对于如何旋转一系列章程列标题有点迷茫。 我需要相当于 1980:2013

的字符

“相当于 1980:2013”的字符 按字面意思是 as.character(1980:2013)。没有它失败的原因是 pivot_longer 将尝试索引列号(即第 1980 列)。

dat <- data.frame(OdName='a', AreaName='b', RegName='c', DevName='d', "1980"=1, "1981"=2, "1982"=3, check.names = FALSE)
tidyr::pivot_longer(dat, 1980:1982, names_to = "Years", values_to = "Count")
# Error: Can't subset columns that don't exist.
# x Locations 1980, 1981, and 1982 don't exist.
# i There are only 7 columns.

关键是 Locations(而且稍微不那么“只有 7 列”)。如果它正在寻找 names 1980 等,那么它会出错:

# x Column `1980` doesn't exist.

(但确实如此)

而是使用 as.character:

tidyr::pivot_longer(dat, as.character(1980:1982), names_to = "Years", values_to = "Count")
# # A tibble: 3 x 6
#   OdName AreaName RegName DevName Years Count
#   <chr>  <chr>    <chr>   <chr>   <chr> <dbl>
# 1 a      b        c       d       1980      1
# 2 a      b        c       d       1981      2
# 3 a      b        c       d       1982      3