【发布时间】:2023-02-09 18:18:01
【问题描述】:
我有一个包含大约 200 列的大型数据集。原始文件在 Excel 中,第一行包含变量名称。变量名称都是调查问题,因此使用起来有点笨拙(例如“你目前的体重是多少?”)
我用过了:
df = read_excel("file.xlsx", sheet = 1)
这很好,但我最终得到了很长的列名,很难使用。
由于有很多列,是否有任何方法可以自动为每一列分配一个简短且易于管理的名称,同时保留原始全名作为标签?
【问题讨论】:
我有一个包含大约 200 列的大型数据集。原始文件在 Excel 中,第一行包含变量名称。变量名称都是调查问题,因此使用起来有点笨拙(例如“你目前的体重是多少?”)
我用过了:
df = read_excel("file.xlsx", sheet = 1)
这很好,但我最终得到了很长的列名,很难使用。
由于有很多列,是否有任何方法可以自动为每一列分配一个简短且易于管理的名称,同时保留原始全名作为标签?
【问题讨论】:
一种方法是创建和使用一个简单的查找向量,并将长名称重命名为“Q1”、“Q2”等,并在需要时将名称改回:
下面是一种使用 dplyr 的方法(对于其他方法,我写了一个 blog post 涵盖基础 R、data.table 和 python)。
library(dplyr)
# create a lookup vector
lookup_vec <- setNames(names(iris),
paste0("Q", seq_along(iris)))
# rename columns to have short names when working with the data
iris2 <- iris %>%
rename(any_of(lookup_vec))
iris2 %>% glimpse()
#> Rows: 150
#> Columns: 5
#> $ Q1 <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.8, 4.8, 4.~
#> $ Q2 <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.~
#> $ Q3 <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.~
#> $ Q4 <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.~
#> $ Q5 <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, setosa, set~
# change names back for output reports
lookup_vec2 <- setNames(names(lookup_vec), lookup_vec)
iris %>%
rename(any_of(lookup_vec2)) %>%
glimpse() # for better printing
#> Rows: 150
#> Columns: 5
#> $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.~
#> $ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.~
#> $ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.~
#> $ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.~
#> $ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s~
由 reprex package (v2.0.1) 创建于 2023-02-09
【讨论】: