如何使“ dplyr select”使用字符参数的值而不是其名称作为文字?

时间:2019-12-12 22:00:19

标签: r dplyr

我有一个简单的功能,可以从数据框中选择一列。 参数“ my_column”是要选择的列的名称。 当datafame包含名为“ my_column”的列时,该函数将无法正常工作。这是一个示例:

library(dplyr)
select_one_column<-function(df,my_column) { select(df,my_column) }

df11 <- data.frame(
  var1 = c( 'good', 'good'),
  var2 = c( 'good2', 'good2') )

df22 <- data.frame(
  var1 = c( 'good', 'good'),
  var2 = c( 'good2', 'good2'),
  my_column=c('bad','bad') )

select_one_column(df11,"var1")```

结果:

var1

1好

2好

select_one_column(df22,'var1')

结果:

my_column

1个坏

2不好

如何使“ dplyr select”使用字符参数的值而不是名称作为文字?

2 个答案:

答案 0 :(得分:0)

如果我们使用select,则一个选项是评估(!!

select_one_column <- function(df, my_column) { 
           select(df, !!my_column)
   }

select_one_column(df11,"var1")
#  var1
#1 good
#2 good

select_one_column(df22,'var1')
#  var1
#1 good
#2 good

答案 1 :(得分:0)

您的解决方案已经可以使用,您只需要确保函数中使用的变量不能是任何数据框的列名即可。

library(dplyr)

select_one_column<-function(df,string_which_cannot_be_column_name) {
     select(df,string_which_cannot_be_column_name) 
} 

select_one_column(df11,"var1")
#  var1
#1 good
#2 good

select_one_column(df22,"var1")
#  var1
#1 good
#2 good

或者,您也可以查看卷曲卷曲运算符({{

select_one_column<-function(df,y)  select(df,{{y}}) 

适用于带引号的列名

select_one_column(df11,"var1")

以及未引用的。

select_one_column(df22,var1)