定义函数以选择数据框中的变量

时间:2018-06-21 10:01:49

标签: r dplyr

我有问题!

我想定义一个函数来选择df的变量 这样

select_var <- function(var1, var2)
  {
    require(dplyr)
    select(df=df,var1,var2)
  }

使用select_var之类的select_var(var_name_1,var_name_2)

没有""

我要我的df我的变量!

然后我想添加var 3 var 4,但是有OPTIONNALS设置了您!谢谢!

2 个答案:

答案 0 :(得分:2)

您可以按以下方式使用enquo!!

select_var <- function(var1, var2)
{
  require(tidyverse)
  var1 <- enquo(var1)
  var2 <- enquo(var2)

  select(mtcars, !!var1, !!var2)
}

select_var(mpg, gear)

#                     mpg gear
#Mazda RX4           21.0    4
#Mazda RX4 Wag       21.0    4
#Datsun 710          22.8    4
#Hornet 4 Drive      21.4    3
#Hornet Sportabout   18.7    3
#Valiant             18.1    3
# ...

不确定您所说的“可选”是什么意思,但也许像这样:

select_var <- function(...)
{
  require(tidyverse)
  vars <- quos(...)

  select(mtcars, !!!vars)
}

select_var(mpg)
select_var(mpg, gear)
select_var(mpg, gear, cyl)

答案 1 :(得分:0)

您可以通过使用which()函数建立索引来从相同或不同的数据框中选择行。您可以使用逻辑运算符在多个变量之间进行操作。

which(df[,var1] == df[,var1] &
      df[,var2] == df[,var2])

where()函数将返回满足函数条件的行索引。如果希望它从数据框中返回行,则可以执行以下操作:

df[
   which(df[,var1] == df[,var1] &
         df[,var2] == df[,var2])
  ,]

这将调用df中符合您条件的行号。