R语言基于降雨二分类条件统计车辆使用组合频次表的实现方法
统计不同降雨场景下车辆使用组合频次的实现方法
你之前使用的xtabs( ~Rain + car.1 + car.2 + car.3 + car.4 ,data = df)会生成5维交叉列联表,需要逐层嵌套查看结果,不符合直接输出组合+频次的需求。我们可以先为每行数据生成对应的车辆使用组合标签,再按降雨分组统计,以下是两种实现方案:
方案1:tidyverse实现(灵活易扩展)
library(tidyverse) # 注意:示例数据中第二辆车列名为cars.2,若实际数据为car.2可自行调整列名列表 result <- df %>% rowwise() %>% mutate( # 提取当前行使用的车辆列名 used_cars = list(c("car.1","cars.2","car.3","car.4")[c(car.1, cars.2, car.3, car.4) == 1]), # 拼接成组合名称,无车辆使用的行单独标记 car_combination = ifelse(length(used_cars) == 0, "无车辆使用", paste(used_cars, collapse = "+")) ) %>% ungroup() %>% # 按降雨情况和车辆组合分组统计频次 count(Rain, car_combination, name = "freq") %>% # 转成宽表,列对应降雨/无降雨,缺失频次填充0 pivot_wider(names_from = Rain, values_from = freq, values_fill = 0) # 如果不需要统计无车辆使用的记录,可在count前加一行 filter(length(used_cars) > 0)
方案2:基础R实现(无需额外安装包)
# 提取所有车辆列,注意第二列列名为cars.2 car_cols <- df[, c("car.1","cars.2","car.3","car.4")] # 逐行生成车辆组合标签 car_combinations <- apply(car_cols, 1, function(x) { used <- colnames(car_cols)[x == 1] if(length(used) == 0) return("无车辆使用") return(paste(used, collapse = "+")) }) # 生成交叉统计表格 result <- table(car_combinations, df$Rain)
输出说明
最终结果的行是所有出现过的车辆使用组合(包含单车辆、多车辆组合,可选排除无车辆使用的情况),列分别对应rain和no rain场景,单元格值为对应组合在该场景下的出现频次。
内容的提问来源于stack exchange,提问作者danielarodriguez
相关产品推荐
相关产品推荐

