首页 > 解决方案 > 枢轴更长的包机标题

问题描述

我有具有以下列名称的数据集

[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"

从我需要将所有年份列旋转到一列“Years”的角度来看,有一个旋转更长的问题。如果列标题带有数字,那将很容易。

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

所以有点迷失了如何旋转一系列宪章专栏标题。我需要相当于 1980:2013 的字符

标签: rpivot-tabletidyr

解决方案


“相当于 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.

关键是位置(稍微少一点——“只有 7 列”)。如果它正在寻找名称 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

推荐阅读