使用 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
将默认 运行 rxCube
或 rxSummary
,这会自动删除 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 版本出来时应该会正式发布。
我正在尝试对某些数据进行初步探索。我正忙于通过将连续变量转换为因子并按频带计算频率来分析连续变量的单向方法。
我想用 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
将默认 运行rxCube
或rxSummary
,这会自动删除 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 版本出来时应该会正式发布。