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

在R中识别数据集里姓名与国家组合的分类数据变化次数

解决R语言中按姓名统计(Name, Country)组合变化次数的问题

嘿,我来帮你搞定这个数据统计需求!核心思路就是按Name分组,统计每个姓名下不同的(Name, Country)组合的数量——这个数量就是你要的“组合变化次数”,比如Smith有2个不同的组合,次数就是2。

下面我给你两种实现方法,分别用dplyr(tidyverse生态,代码更直观)和base R(无需额外装包):

方法1:用dplyr包处理

首先确保你已经安装了dplyr,如果没装的话先运行安装命令:

install.packages("dplyr")

然后按步骤来:

  1. 构造示例数据集(和你给的示例一致)
  2. 分组统计每个Name对应的唯一组合数
# 加载dplyr包
library(dplyr)

# 创建示例数据
df <- data.frame(
  Name = c("Smith", "Avin", "Smith", "Robin"),
  country = c("Canada", "India", "India", "France"),
  age = c(27, 25, 27, 28),
  stringsAsFactors = FALSE
)

# 统计每个Name的组合变化次数
result <- df %>%
  group_by(Name) %>%
  summarize(combination_change_count = n_distinct(country))

# 查看结果
print(result)

运行后你会得到这样的输出:

# A tibble: 3 × 2
  Name  combination_change_count
  <chr>                    <int>
1 Avin                         1
2 Robin                        1
3 Smith                        2

解释一下:同一个Name下,不同的country就对应不同的(Name, country)组合,所以直接用n_distinct(country)统计每个分组里的唯一country数量,就是我们要的组合变化次数,简洁又准确。

方法2:用Base R处理

如果你不想额外安装包,用base R的aggregate函数也能实现:

# 创建示例数据
df <- data.frame(
  Name = c("Smith", "Avin", "Smith", "Robin"),
  country = c("Canada", "India", "India", "France"),
  age = c(27, 25, 27, 28),
  stringsAsFactors = FALSE
)

# 统计每个Name的组合变化次数
result_base <- aggregate(country ~ Name, data = df, FUN = function(x) length(unique(x)))
colnames(result_base)[2] <- "combination_change_count"

# 查看结果
print(result_base)

输出结果和dplyr方法完全一致:

Name combination_change_count
1  Avin                         1
2 Robin                         1
3 Smith                         2

这里的核心是用function(x) length(unique(x))来统计每个Name分组下country的唯一值数量,完美对应组合变化次数的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:31