【问题标题】:Can one argument be mapped to more than one argument in a user-defined function?一个参数可以映射到用户定义函数中的多个参数吗?
【发布时间】:2017-08-15 16:49:33
【问题描述】:

假设我想运行这个:

MS_date<-bind_inpatient_MSW %>% 
  arrange(NRIC,
          APPROVED_DATE_BILL,APPROVED_DATE_FF_APPLICATION) %>%
  group_by(NRIC,
           APPROVED_DATE_BILL,APPROVED_DATE_FF_APPLICATION) %>%
  mutate(n_marital_status=n_distinct(MARITAL_STATUS,na.rm=TRUE))

还有这个

TH_date<-bind_inpatient_MSW %>% 
  arrange(NRIC,
          APPROVED_DATE_BILL) %>%
  group_by(NRIC,
           APPROVED_DATE_BILL) %>%
  mutate(n_TH=n_distinct(TYPE_OF_HOUSING,na.rm=TRUE))

这两者的不同之处在于排列和分组数据框的变量以及添加的变量。我想编写一个用户定义的函数,这样我就不必多次编写了。我尝试如下:

df_date<-function(df,grpby,cntby){
  dfnew<-df %>%
    arrange(grpby) %>%
    group_by(grpby) %>%
    mutate(n=n_distinct(cntby,na.rm=TRUE))
  return(dfnew)
}

并申请df_date(bind_inpatient_MSW,NRIC,APPROVED_DATE_BILL,APPROVED_DATE_FF_APPLICATION,MARITAL_STATUS)

df_date(bind_inpatient_MSW,NRIC,APPROVED_DATE_BILL,TYPE_OF_HOUSING)

他们不会工作。我该如何解决这个问题?

【问题讨论】:

  • 检查cntby是否存在,如果不存在则将grpby分配给cntby,并使用group_by_arrange_,将字符串作为变量名传递。 stackoverflow.com/questions/7964830/… 的可能重复项

标签: r function dplyr user-defined-functions


【解决方案1】:

你可以试试这样的:

fun <- function(dat,group,ctnby) {
            dat %>% 
            group_by_(group) %>%
            do((function(., ctnby) {
                with(., data.frame(n = n_distinct(get(ctnby))))
            } 
    )(.,ctnby))
    }

fun(mtcars,"cyl","hp")

避免使用do 进行懒惰评估。

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多