使用dplyrXdf

时间:2017-08-12 21:03:34

标签: r dplyr microsoft-r

我正在尝试对某些数据进行一些初步探索。我正在忙着分析连续变量的单向方法,将它们转换为因子并按频带计算频率。

我想用dplyrXdf执行此操作,但它似乎与我正在尝试的正常dplyr无关

sample_data <- RxXdfData("./data/test_set.xdf") #sample xdf for testing
as_data_frame <- rxXdfToDataFrame(sample_data) #same data as dataframe

# Calculate freq by Buildings Sum Insured band 

将我的样本数据导入为数据帧,以下代码可以正常工作

buildings_ad_fr <- as_data_frame %>% 
  mutate(bd_cut = cut(BD_INSURED_VALUE, seq(from = 150000, to = 10000000,by = 5000000))) %>% 
  group_by(bd_cut) %>% 
  summarise(exposure = sum(BENEFIT_EXPOSURE, na.rm = TRUE),
            ad_pd_f = sum(ACT_AD_PD_CLAIM_COUNT)/sum(BENEFIT_EXPOSURE, na.rm = TRUE))

但我不能使用数据的xdf版本做同样的事情

buildings_ad_fr_xdf <- sample_data %>% 
      mutate(bd_cut = cut(BD_INSURED_VALUE, seq(from = 150000, to = 10000000,by = 5000000))) %>% 
      group_by(bd_cut) %>% 
      summarise(exposure = sum(BENEFIT_EXPOSURE, na.rm = TRUE),
                ad_pd_f = sum(ACT_AD_PD_CLAIM_COUNT)/sum(BENEFIT_EXPOSURE, na.rm = TRUE))

我可以想到的解决方法是使用rxDataStep通过在变换参数中传递bd_cut = cut(BD_INSURED_VALUE, seq(from = 150000, to = 10000000,by = 5000000))来创建新列,但是没有必要进行中间步骤。

我尝试在group_by表达式之前使用.rxArgs函数,但这似乎也不起作用

buildings_ad_fr <- sample_data %>% 
  mutate(sample_data,.rxArgs = list(transforms = list(bd_cut = cut(BD_INSURED_VALUE,
                                                                   seq(150000,
                                                                       10000000,
                                                                       5000000)))))%>%
  group_by(bd_cut) %>% 
    summarise(exposure = sum(BENEFIT_EXPOSURE, na.rm = TRUE),
            ad_pd_f = sum(ACT_AD_PD_CLAIM_COUNT)/sum(BENEFIT_EXPOSURE, na.rm = TRUE))

在xdf文件上的两次都会出现错误Error in summarise.RxFileData(., exposure = sum(BENEFIT_EXPOSURE, na.rm = TRUE),: with xdf tbls only works with named variables, not expressions

现在我知道这个包可以分解变量,但我不知道如何使用它来分割连续变量

有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

mutate应该没问题。 summarise对于Xdf文件是不同的:

  • 内部summarise默认会运行rxCuberxSummary,这会自动删除新来的内容。您不需要na.rm=TRUE

  • 您无法对表达式进行总结。解决方案是运行汇总,然后计算表达式:

xdf %>%
    group_by(*) %>%
    summarise(expos=sum(expos), pd=sum(clms)) %>%
    mutate(pd=pd/expos)

我还只是updated dplyXdf to 0.10.0 beta,它增加了对HDFS / Spark和dplyr 0.7的支持以及几个漂亮的实用功能。如果您还没有使用它,可能需要查看它。正式发布应该在下一个MRS版本发布时发生。