R语言ggplot密度图按分位数分4组并为数据表新增group列的方法
你已经提前计算好了q5(Qeff的5%分位数)、median(Qeff的中位数)、q95(Qeff的95%分位数)三个阈值,直接用下面两种data.table原生操作方式即可实现需求:
方法1:使用fcase(推荐,data.table原生,大表性能更高)
fcase是data.table提供的多条件分支函数,逻辑清晰可控,完全匹配你的分组规则:
library(data.table) # 新增group列 dt.all2018[, group := fcase( Qeff <= q5, 1L, Qeff > q5 & Qeff <= median, 2L, Qeff > median & Qeff <= q95, 3L, Qeff > q95, 4L )]
代码里的1L/2L表示生成整数类型的分组值,符合你要求的group列仅含1-4数字的要求。如果数据存在NA值,可以在fcase最后加default = NA_integer_参数处理缺失值。
方法2:使用cut函数(写法更简洁)
用cut直接按阈值划分区间后转成整数即可:
dt.all2018[, group := as.integer(cut( Qeff, breaks = c(-Inf, q5, median, q95, Inf), include.lowest = TRUE ))]
参数include.lowest = TRUE保证小于等于5%分位数的取值会被归入第一组,生成的整数结果刚好对应1-4的分组编号。
结果验证
可以执行下面的代码查看各分组的样本量,确认分组逻辑正确:
dt.all2018[, .N, by = group][order(group)]
内容的提问来源于stack exchange,提问作者Miko
相关产品推荐
相关产品推荐

