本文主要运用apply函数族、map函数族、自定义函数的数据处理。
将同类数据处理函数化,极大提升数据处理效率!
1、自定义函数-含变量、参数
#通用函数说明
#data_eg为传入的数据集,var1为传入的变量,para1、para2为传入的参数
#此函数便于计算任意变量在指定的范围内的计算结果
eg_function<-function(data_eg,var1,para1,para2){
data_eg%>% filter(between({{var1}},para1,para2)) %>%
group_by(para3,para4) %>%
summarise("tag_var2":=sum(var2,na.rm=TRUE))
}
2、自定义函数与apply函数族的综合运用
#通用函数说明
#data_eg为传入的数据集,var1为传入的变量,para1、para2、para3为传入的参数,
#...为传入任意变量(可以为单个变量,也可为多个)
#此函数便于计算任意变量的周期数据
eg_function <- function(data_eg,para1,para2,para3,var_inpute,...){
if(para2==para3){
data_eg2<-data_eg%>%
filter(para4==para1,para6==para5)
data_eg3<- data_eg%>%
filter(para4==para1,para6==para5) %>%
group_by(...) %>%
summarise(result1=n_distinct({{var_inpute}}))
}else{
data_eg4<-data_eg%>%
filter(para4==para1)
data_eg3<- data_tag %>%
group_by(...) %>%
summarise(result2=n_distinct({{var_inpute}}))
}
data_eg6<- data_tag %>%
filter(para4==para1+1,para7 %in% data_eg4${{var_inpute}}) %>%
group_by(...) %>%
summarise(para4=para1,result3=n_distinct({{var_inpute}})) %>%
select(para4,para8,result2) %>%
left_join(data_eg3)
return(data_eg6)
}
#利用上面函数,结合apply进行周期数据计算,可减少重复写同类的计算
#var1,var2为...传入的变量
rbindlist(apply(as.array(x1:x2,1,
function(x) eg_function(data_eg,para1,para2,para3,var_inpute,var1,var2) )))
3、通用函数实战示例,以iris数据作为基础
iris_func <- function(date_eg,var1,var2,compute_fun){
date_eg %>% group_by({{var1}}) %>%
summarise("res_var1"=compute_fun({{var2}},na.rm=TRUE))
}
iris_func(iris,Species,Sepal.Width,sum)
iris_func(iris,Species,Sepal.Width,mean)
未完待续...
|