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

R语言按国家分组统计多列中武器系统唯一值总数如何实现

解决方案

方法1:tidyverse实现(可读性高,适配复杂场景)

这是R生态中最常用的实现方式,代码逻辑清晰,无需手动枚举所有武器列:

# 加载依赖包
library(tidyverse)

# 统计逻辑
result <- df %>%
  # 转换为长格式:仅保留国家列,其余非武器列(此处为年份b)直接排除
  # 武器列多的时候无需手动列全,用!c(a,b)即可自动识别所有武器列
  pivot_longer(cols = !c(a, b), values_to = "weapon") %>%
  # 按国家分组
  group_by(a) %>%
  # 统计非缺失的唯一武器数量
  summarise(weapon_count = n_distinct(weapon, na.rm = TRUE))

运行后输出结果如下:

# A tibble: 3 × 2
  a       weapon_count
  <chr>          <int>
1 Belgium            4
2 Germany            3
3 Greece             4

完全符合你给出的德国列装3款武器的示例结果。

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

如果你不想额外加载依赖包,可以用原生R语法实现:

# 按国家拆分数据集
country_split <- split(df, df$a)

# 逐国家统计唯一武器数
count_vec <- sapply(country_split, function(sub_df) {
  # 提取当前国家所有武器列的取值
  all_weapons <- unlist(sub_df[, setdiff(colnames(sub_df), c("a", "b"))])
  # 排除缺失值后统计唯一值数量
  length(unique(na.omit(all_weapons)))
})

# 转为更易读的数据框格式
result <- data.frame(
  country = names(count_vec),
  weapon_count = as.integer(count_vec)
)

运行结果和方法1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:12:04