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

如何快速检测DataFrame中每个姓名对应的城市是否变化?

检测DataFrame中每个姓名对应的城市是否变化

针对你的大型DataFrame,我们可以通过分组统计每个姓名下的城市唯一值数量,快速判断是否存在城市变化。下面是两种实用的实现方法:

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

先加载dplyr包,通过分组计算每个姓名对应的唯一城市信息:

library(dplyr)

# 生成包含城市变化情况的统计结果
city_change_check <- df %>%
  group_by(Name) %>%
  summarise(
    唯一城市数量 = n_distinct(City),
    是否有城市变化 = 唯一城市数量 > 1,
    去过的城市列表 = paste(unique(City), collapse = ", ")
  )

# 查看统计结果
print(city_change_check)

运行后会得到一个新表,其中是否有城市变化为TRUE的记录,就是对应姓名出现过城市变更的情况。

方法2:使用Base R(无需额外安装包)

如果不想安装第三方包,用Base R也能实现同样的功能:

# 按姓名分组,统计每个组的唯一城市数量
unique_city_counts <- tapply(df$City, df$Name, function(x) length(unique(x)))

# 整理为结构化的结果表
city_change_check_base <- data.frame(
  Name = names(unique_city_counts),
  唯一城市数量 = as.numeric(unique_city_counts),
  是否有城市变化 = as.numeric(unique_city_counts) > 1,
  row.names = NULL
)

# 添加去过的城市列表
city_change_check_base$去过的城市列表 <- sapply(split(df$City, df$Name), function(x) paste(unique(x), collapse = ", "))

# 查看结果
print(city_change_check_base)

筛选有城市变化的姓名

如果只需要找出存在城市变化的记录,可以用以下代码:

dplyr版本

changed_names <- city_change_check %>% filter(是否有城市变化)
print(changed_names)

Base R版本

changed_names_base <- city_change_check_base[city_change_check_base$是否有城市变化, ]
print(changed_names_base)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:46:00