R语言处理dataframe并为网格病例数据分配优先级新增列咨询
R语言网格病例优先级分配实现
基础场景(无病例数平权)
直接按病例数降序排序后新增优先级列即可,以下是可直接运行的代码:
# 1. 构造示例数据集 df <- data.frame( `no of cases` = c(12, 22, 34), `grid number` = c(454, 345, 67), check.names = FALSE ) # 2. 按病例数从高到低排序 df_sorted <- df[order(-df$`no of cases`), ] # 3. 新增priority优先级列 df_sorted$priority <- 1:nrow(df_sorted) # 查看结果 print(df_sorted)
运行后输出结果和要求的示例完全一致:
| no of cases | grid number | priority |
|---|---|---|
| 34 | 67 | 1 |
| 22 | 345 | 2 |
| 12 | 454 | 3 |
平权场景补充实现
如果存在不同网格病例数相同的情况,需要先准备网格相邻关系映射表(记录每个网格对应的所有相邻网格编号),实现逻辑如下:
- 基于相邻关系表,计算每个网格的相邻网格病例总和
- 排序时设置双排序条件:第一优先级是
no of cases降序,第二优先级是相邻病例总和降序 - 按排序后的顺序生成优先级序号即可
示例逻辑代码(需替换其中的相邻关系数据为实际业务数据):
# 示例相邻总和表,neighbors_sum为对应网格所有相邻网格的病例数总和,可根据实际相邻关系计算得到 grid_neighbors <- data.frame( grid_number = c(67, 345, 454), neighbors_sum = c(45, 30, 22) ) # 关联原数据和相邻总和数据 df_merge <- merge(df, grid_neighbors, by.x = "grid number", by.y = "grid_number") # 双条件排序:先按病例数降序,再按相邻总和降序 df_sorted_equal <- df_merge[order(-df_merge$`no of cases`, -df_merge$neighbors_sum), ] # 生成优先级 df_sorted_equal$priority <- 1:nrow(df_sorted_equal)
内容的提问来源于stack exchange,提问作者shine
相关产品推荐
相关产品推荐

