使用 dplyrXdf 将连续变量转换为分类变量

Converting continuous variable to categorical with dplyrXdf

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

我想用 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 通过在 transforms 参数中传递 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

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

有人知道怎么做吗?

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

  • 内部 summarise 将默认 运行 rxCuberxSummary,这会自动删除 NA。你不需要 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 版本出来时应该会正式发布。