R dplyr:: 使用字符串变量重命名和选择
Posted
技术标签:
【中文标题】R dplyr:: 使用字符串变量重命名和选择【英文标题】:R dplyr:: rename and select using string variable 【发布时间】:2016-07-30 23:15:54 【问题描述】:我正在尝试在我的数据框中选择一个变量子集,并重命名新数据框中的变量。我有大量需要重命名的变量。我正在使用
dplyr::select
dplyr::select_
由于我有许多要重命名的变量,我正在考虑是否应该使用字符串变量来重命名,但不确定是否可行?使用字符串可以帮助我管理新名称旧名称映射。这是一个例子
dplyr::select
library(dplyr)
library(nycflights13)
set.seed(123)
data <- sample_n(flights, 3)
select(data,yr=year,mon=month,deptime=dep_time)
问题是如何在字符串中传递这个参数,即 newvariable=oldvariable 参数,然后使用
dplyr::select_
col_vector <- c("year", "month", "dep_time")
select_(data, .dots = col_vector)
我想到的字符串是:
rename_vector <- c("yr=year","mon=month","deptime=dep_time")
任何建议都会非常有帮助。
【问题讨论】:
为什么不用colnames(data) <- col_vector
更改列名?
真正的问题是如何在不手动构建的情况下自动生成col_vector
?然后,您必须提供一些有关如何重命名这些列的逻辑。
@Gopala 在我的情况下,我不必更改所有列名,只需更改其中的一个子集。此外,通过“新名称 = 旧名称”不仅可以使其可读,还可以确保直接 1-1 匹配。想想 50 个变量名。
您可以选择性地使用names(mtcars)[c(1, 2, 3)] <- c('z', 'y', 'z')
或使用名称names(mtcars)[names(mtcars) %in% c('x', 'y', 'z')] <- c('mpg', 'cyl', 'disp')
重命名列。
如果您只想重命名一些变量但不是全部,这个答案可能很有用:***.com/a/44143688/3871924
【参考方案1】:
您可以将列表传递给dplyr::select_
中的.dots
,而不是使用向量,其中名称是新列名称,旧名称是字符。
> rename_list <- list(sepal_length = "Sepal.Length", sepal_width = "Sepal.Width")
> iris %>% tbl_df %>% select_(.dots = rename_list)
Source: local data frame [150 x 2]
sepal_length sepal_width
(dbl) (dbl)
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
7 4.6 3.4
8 5.0 3.4
9 4.4 2.9
10 4.9 3.1
.. ... ...
【讨论】:
【参考方案2】:dplyr
另一个使用 dplyr
和 setNames
的选项来传递带有新列名的向量:
iris %>%
select(Sepal.Length, Sepal.Width) %>%
setNames(c("sepal_length","sepal_width"))
基础包
setNames(iris[, c("Sepal.Length", "Sepal.Width")],
c("sepal_length", "sepal_width"))
data.table
library(data.table)
setnames(iris, old = c("Sepal.Length", "Sepal.Width"), new = c("sepal_length","sepal_width"))
【讨论】:
【参考方案3】:使用rename_with
,您可以执行以下操作:
old = c("Sepal.Length", "Sepal.Width")
new = c("sepal_length", "sepal_width")
iris %>%
dplyr::select(all_of(old)) %>%
dplyr::rename_with(~ new, all_of(old))
【讨论】:
以上是关于R dplyr:: 使用字符串变量重命名和选择的主要内容,如果未能解决你的问题,请参考以下文章
在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?
R语言dplyr包select函数rename函数dataframe变量抽取及重命名实战