【发布时间】:2020-11-18 20:09:52
【问题描述】:
我有一个需要动态重命名特定列的数据集。
例如,我通常会按以下方式重命名“mtcars”数据集:
# THIS WORKS
# Load data
data <- mtcars
# Gather data.frame with columns to rename, I am doing it this way because I generally have
# a long list of "configurations" to plot that I go through in a for loop. Might not be the most
# efficient, but it generally works for me.
Columns_to_rename <- data.table(X = "mpg", Y = "gear", Color = "carb")
# Rename columns
plot_data <- data %>%
dplyr::rename(X := !!Columns_to_rename$X[1],
Y := !!Columns_to_rename$Y[1],
Color := !!Columns_to_rename$Color[1]) %>%
dplyr::select(X, Y, Color)
但是,在我的真实数据集中具有真实的Columns_to_rename,我的数据集可能不包含标题。我只想忽略重命名。
考虑上例中的情况:
Columns_to_rename <- data.table(X = "mpg", Y = "gear", Color = "missing")
据我所知,dplyr 包要求所有列都存在。坚持使用tidyverse,我考虑使用plyr 包,因为我知道这允许丢失列名。不幸的是,我无法弄清楚如何动态调用列。我查看了以前的 StackOverflow 问题和答案,但没有看到有人需要在重命名时结合这两个原则。
谢谢!
【问题讨论】:
-
我知道一般情况下最好避免这种情况,但在这种情况下,您可以按位置调用未命名的列吗?
-
那行不通,因为我的“Columns_to_rename”在每次迭代之间都会发生变化,因此列号会随着每次迭代而变化。但是谢谢你的想法!
标签: r