R dplyr ::重命名并使用字符串变量进行选择

时间:2016-04-09 18:16:57

标签: r string dplyr rename

我试图在我的数据框中选择一个变量子集,并重命名新数据框中的变量。我有大量的变量需要重命名。我正在使用

dplyr::select
dplyr::select_

由于我有多个要重命名的变量,我在想是否应该使用字符串变量来重命名,但不确定它是否可能?使用字符串可以帮助我管理newname oldname映射。这是一个例子

dplyr::select
library(dplyr)
library(nycflights13) 
set.seed(123)
data <- sample_n(flights, 3)

select(data,yr=year,mon=month,deptime=dep_time)

我怎么能在字符串中传递this的参数,即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")

任何建议都会非常有用。

3 个答案:

答案 0 :(得分:7)

<强> dplyr

dplyrsetNames结合使用的另一个选项是使用新列名传递向量:

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

答案 1 :(得分:6)

您可以将列表传递给.dots中的dplyr::select_,而不是使用向量,其中名称是新列名称,旧名称是字符。

> 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 :(得分:1)

使用 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))