使用dplyr

时间:2017-01-23 22:47:51

标签: r dplyr lazyeval

我知道在函数中使用 lazyeval ,以便使用 dplyr 来引用列名,但是卡住。通常,在创建使用 dplyr 的函数时,它也会引用函数参数中的列名,实现这一点的最常用的方法是什么?感谢。

 library(lazyeval)

 ## Create data frame
 df0 <- data.frame(x=rnorm(100), y=runif(100))

 ##########################################
 ## Sample mean; this way works
 ##########################################
 df0 %>%
   filter(!is.na(x)) %>%
   summarize(mean=mean(x))

 ##########################################
 ## Sample mean via function; does not work
 ##########################################
 dfSummary2 <- function(df, var_y) { 
   p <- df %>%
        filter(!is.na(as.name(var_y))) %>%
        summarize(mean=mean(as.name(var_y)))
   return(p)
}

dfSummary(df0, "x")
#   mean
# 1   NA
# Warning message:
# In mean.default("x") : argument is not numeric or logical: returning NA

 ##########################################
 ## Sample mean via function; also does not work
 ##########################################
 dfSummary <- function(df, var_y) {
   p <- df %>%
        filter(!is.na(var_y)) %>%
        summarize(mean=mean(var_y))
  return(p)
}

 dfSummary(df0, "x")
 #   mean
 # 1   NA
 # Warning message:
 # In mean.default("x") : argument is not numeric or logical: returning NA

1 个答案:

答案 0 :(得分:2)

如果使用filter_,使用dplyrvignette("nse")的评论是正确的方向,dplyr可以获得更多信息。

虽然有给定的问题,但这将提供一个使用变量列名而不需要dfSummary <- function(df, var_y) { mean(df[[var_y]], na.rm = TRUE) } dfSummary(df0, "x") [1] 0.105659 dfSummary(df0, "y") [1] 0.4948618 的函数

paste()