Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R dplyr方法在自己的函数中_R_Function_Dplyr - Fatal编程技术网

R dplyr方法在自己的函数中

R dplyr方法在自己的函数中,r,function,dplyr,R,Function,Dplyr,考虑对数据帧的dplyr处理: existing.df <- filter(existing.df, justanEx > 0) %>% arrange(desc(justanEx)) %>% mutate(mean = mean(justanEx), median = median(justanEx), rank = seq_len(leng

考虑对数据帧的dplyr处理:

existing.df <- filter(existing.df, justanEx > 0) %>%
                arrange(desc(justanEx)) %>%
                mutate(mean = mean(justanEx), 
                median = median(justanEx),
                rank = seq_len(length(anotherVar)))
如果我尝试:

existing.df <- df.overZ(existing.df, realVar)
我已经试过过滤、排列和变异

但没什么值得去做的

这行吗

不过,以下功能可以工作:

make.df <- function(var, n){
        df <- orign.df %>% filter(!is.na(var)) %>%
                select(1:2,n,3:6)
        df
}

existing.df <- make.df("oneVar",7)
make.df%
选择(1:2,n,3:6)
df
}

existing.df使用
dplyr的devel版本(即将发布
0.6.0
),我们可以使用
quosure

library(dplyr)
df.overZ <- function(data, Var){
          Var <- enquo(Var)
         data %>%
               filter(UQ(Var) > 0) %>%
               arrange(desc(UQ(Var))) %>%
               mutate(Mean = mean(UQ(Var)),
                      Median = median(UQ(Var)),
                      rank = row_number())

 }

df.overZ(iris, Sepal.Length)

这里,
enquo
做的工作与
基R
中的
替换
类似,方法是获取输入参数并将其转换为
quosure
,然后在函数(
过滤/排列/变异/总结/分组
)中,我们取消引用(
UQ
)对其进行评估。我们还可以通过在赋值的左侧传递
quosure
:=

错误消息是什么?另外,请提供一些示例数据(
data.df的内容)。请使用
dput
显示一个小示例数据,并根据添加的错误消息显示预期输出。请注意,这必须适用于现有的data.frame,即任何data.frame。
existing.df <- df.overZ(existing.df, realVar)
Error in filter_impl(.data, dots) : obj 'realVar' not found
make.df <- function(var, n){
        df <- orign.df %>% filter(!is.na(var)) %>%
                select(1:2,n,3:6)
        df
}

existing.df <- make.df("oneVar",7)
library(dplyr)
df.overZ <- function(data, Var){
          Var <- enquo(Var)
         data %>%
               filter(UQ(Var) > 0) %>%
               arrange(desc(UQ(Var))) %>%
               mutate(Mean = mean(UQ(Var)),
                      Median = median(UQ(Var)),
                      rank = row_number())

 }

df.overZ(iris, Sepal.Length)
df.overZ2 <- function(data, Var, grpVar){
          Var <- enquo(Var)
          grpVar <- enquo(grpVar)
          newVar <- paste(quo_name(Var), c("Mean", "Median", "Rank"), sep="_")
         data %>%
               filter(UQ(Var) > 0) %>%
               arrange(desc(UQ(Var))) %>%
               group_by(UQ(grpVar)) %>%
               summarise(UQ(newVar[1]) := mean(UQ(Var)),
                      UQ(newVar[2]) := median(UQ(Var)),
                      UQ(newVar[3]) := n())

}

df.overZ2(iris, Sepal.Length, Species)
# A tibble: 3 × 4
#    Species Sepal.Length_Mean Sepal.Length_Median Sepal.Length_Rank
#      <fctr>             <dbl>               <dbl>             <int>
#1     setosa             5.006                 5.0                50
#2 versicolor             5.936                 5.9                50
#3  virginica             6.588                 6.5                50