能否使用CrossTable函数并对输出中的年收入设置分组范围?
解决方案:对年收入分组后生成交叉表
当然可以解决这个问题!你只需要先对annual_inc变量做分组处理,再把分组后的变量传入CrossTable函数就行。这里给你两种实用的分组方法:
1. 手动自定义分组区间
针对你数据集中年收入0-900万的范围,你可以用cut()函数手动设置合理的分组断点,比如按收入层级划分:
# 对年收入进行分组 loandata$annual_inc_grouped <- cut( loandata$annual_inc, breaks = c(0, 100000, 300000, 500000, 9000000), # 自定义分组边界 labels = c("0-10万", "10-30万", "30-50万", "50万以上"), # 每组的显示名称 include.lowest = TRUE # 确保最小值0被包含在第一个组内 ) # 使用分组后的变量生成交叉表 CrossTable(loandata$annual_inc_grouped, loandata$grade, prop.r = TRUE, prop.c = FALSE, prop.t = FALSE, prop.chisq = FALSE)
你可以根据分析需求调整breaks和labels参数,比如如果想重点关注高收入群体,可以把50万以上的区间拆分成更细的组(比如50-100万、100万以上)。
2. 按分位数分组(保证每组样本量均匀)
如果希望每组的样本数量更均衡,可以用分位数来划分区间,比如四分位数:
# 按年收入的四分位数分组 loandata$annual_inc_quantile <- cut( loandata$annual_inc, breaks = quantile(loandata$annual_inc, na.rm = TRUE), # 自动计算四分位数断点 labels = c("Q1(最低25%)", "Q2", "Q3", "Q4(最高25%)"), include.lowest = TRUE ) # 生成交叉表 CrossTable(loandata$annual_inc_quantile, loandata$grade, prop.r = TRUE, prop.c = FALSE, prop.t = FALSE, prop.chisq = FALSE)
注意:如果你的数据中有NA值,一定要加上na.rm = TRUE参数来忽略缺失值,避免分组出错。
额外小提示
分组完成后,可以用table(loandata$annual_inc_grouped)检查每组的样本数量,确认分组是否符合你的预期。
内容的提问来源于stack exchange,提问作者Gibz Major
相关产品推荐
相关产品推荐

