You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按PNR分组比较相邻行列值新增R/O标识列如何实现

R实现分组新增往返标记列的解决方案

你提供的初始示例数据代码如下:

data <- data.frame( 
    Details = c("PNR1", "PNR1", "PNR11", "PNR2", "PNR2"), 
    FromCity = c("MAA", "BLR", "DEL", "TRV", "HYD"), 
    ToCity = c("BLR", "MAA", "MAA", "HYD", "TRV")
)

方法1:使用dplyr包(推荐,语法简洁易读)

核心用dplyr的分组 + 偏移函数lead()实现逻辑,无需手动写循环:

library(dplyr)
data <- data %>%
  group_by(Details) %>%
  mutate(
    # 取当前行下一行的ToCity值,每组最后一行默认返回NA
    next_ToCity = lead(ToCity, default = NA),
    # 按规则判断,NA(每组最后一行)直接赋值为O
    flag = ifelse(FromCity == next_ToCity, "R", "O")
  ) %>%
  # 可选:删除辅助列next_ToCity
  select(-next_ToCity) %>%
  ungroup()

运行后输出结果如下:

Details FromCity ToCity flag
  <chr>   <chr>    <chr>  <chr>
1 PNR1    MAA      BLR    R    
2 PNR1    BLR      MAA    O    
3 PNR11   DEL      MAA    O    
4 PNR2    TRV      HYD    R    
5 PNR2    HYD      TRV    O    

如果需要和你提供的预期dput结构匹配,把初始数据的PNR11改为PNR1即可,逻辑完全通用。

方法2:Base R实现(无需额外安装包)

用ave()函数实现分组计算,逻辑和上面一致:

data$flag <- ave(
  seq(nrow(data)),
  data$Details,
  FUN = function(idx) {
    next_ToCity <- data$ToCity[idx + 1]
    ifelse(data$FromCity[idx] == next_ToCity, "R", "O")
  }
)

两种方法都可以替代手动遍历factor的实现,效率更高代码更简洁。

内容的提问来源于stack exchange,提问作者Prabhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:36:02