R dplyr方法在自己的函数中
考虑对数据帧的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
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