R语言-高效数据处理之泛函数化@灵魂体验官

本文主要运用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数据例子1
iris_func(iris,Species,Sepal.Width,sum)
#运行结果
# A tibble: 3 x 2
  Species    res_var1
  <fct>         <dbl>
1 setosa         171.
2 versicolor     138.
3 virginica      149.


#iris数据例子2
iris_func(iris,Species,Sepal.Width,mean)
#运行结果
# A tibble: 3 x 2
  Species    res_var1
  <fct>         <dbl>
1 setosa         3.43
2 versicolor     2.77
3 virginica      2.97

关注我,你就是我的电子朋友咯!icon-default.png?t=N7T8https://blog.csdn.net/LEEBELOVED

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEEBELOVED

一分钱都是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值