在R中基于频率条件从xtab列表筛选自变量名称
筛选因变量分组中样本数不足2的自变量
需求说明
从已生成的交叉表列表infcom中,找出在因变量PIM1的任意分组里,存在变量水平样本数不足2的自变量名称(示例中符合条件的是Sex)。
示例数据代码
patientsID<-c(1:10) PIM1<-c(1,1,0,1,0,1,1,0,0,1) Age <- c(65, 65, 68, 68, 68, 70, 70, 70, 70, 68) Sex <- c('M', 'F', 'M', 'M','M', 'M','M', 'M','M', 'M') Cop <- c(0,1,0,1,0,1,1,0,1,1) df <- data.frame(patientsID,PIM1,Age,Sex,Cop) infcom<-apply(df[, -1], 2, function(x) xtabs(~df$PIM1+x))
解决方案代码
# 筛选符合条件的自变量名称 vars_with_small_groups <- names(infcom)[sapply(infcom, function(tab) any(tab < 2))] # 输出结果 vars_with_small_groups
代码逻辑解释
- 用
sapply遍历infcom列表中的每个交叉表对象 - 对每个交叉表,通过
any(tab < 2)检查是否存在单元格值小于2的情况 - 提取对应变量名,最终得到所有符合条件的自变量
运行示例代码后,会返回"Sex",原因是Sex的F水平在PIM1分组中仅1个样本,满足样本数不足2的条件。
内容的提问来源于stack exchange,提问作者Amir Habibdoust
相关产品推荐
相关产品推荐

