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

在R中如何按两列分组匹配,将组内id值替换为最小no对应的id值

实现方案

测试数据构造

你可以直接用以下代码读取你的示例数据到R环境中:

df <- read.table(text = "
no     name     city    id
1301    Lee       A    1301-1     
1001    Lee       A    1001-2
1201    Lee       A    1201-4
1402    Sam       B    1402-4    
1622    Sam       C    1622-5 
", header = TRUE, stringsAsFactors = FALSE)

方法1:使用dplyr包(推荐,代码易读)

# 加载依赖包,未安装的话先运行 install.packages("dplyr")
library(dplyr)

res <- df %>%
  # 按name、city两列分组
  group_by(name, city) %>%
  # 组内id统一替换为no最小值对应的id值
  mutate(id = id[which.min(no)]) %>%
  # 取消分组避免后续操作受分组属性影响
  ungroup()

运行后输出结果和你的预期完全一致:

# A tibble: 5 × 4
     no name  city  id    
  <int> <chr> <chr> <chr> 
1  1301 Lee   A     1001-2
2  1001 Lee   A     1001-2
3  1201 Lee   A     1001-2
4  1402 Sam   B     1402-4
5  1622 Sam   C     1622-5

方法2:Base R实现(无需安装第三方包)

df$id <- ave(seq(nrow(df)), df$name, df$city, FUN = function(idx) {
  df$id[idx][which.min(df$no[idx])]
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:27:02