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

在R中按性别、品种组和年龄聚合数据集统计个体数量

解决方案

思路说明

你需要先把宽格式的年龄列转换为长格式——因为你的年龄数据分散在13列里,直接用aggregate没法跨列统计。转成窄表后过滤掉空值(死亡个体的记录),再按品种组、年龄、性别分组计数即可。


方法一:使用tidyverse工具包(推荐)

如果还没安装tidyverse,先执行安装命令:

install.packages("tidyverse")

然后处理数据:

library(tidyverse)

# 假设你的数据集名为df,13个年龄列是第3到15列(或直接列名,比如Age_2010:Age_2022)
long_data <- df %>%
  # 将所有年龄列转成长表,保留Sex和Group,新增Year(可忽略)和Age列
  pivot_longer(cols = -c(Sex, Group), names_to = "Year", values_to = "Age") %>%
  # 过滤掉年龄为空的行(即个体已死亡的记录)
  drop_na(Age) %>%
  # 确保Age是数值型(如果原始数据是字符格式的话)
  mutate(Age = as.numeric(Age))

# 分组统计数量
final_result <- long_data %>%
  group_by(Group, Age, Sex) %>%
  summarize(Count = n(), .groups = "drop")

方法二:使用Base R(无需额外包)

如果不想安装工具包,用原生R代码处理:

# 将宽表转成长表
long_data <- reshape(df,
                     varying = names(df)[-c(1,2)],  # 指定所有年龄列(排除Sex和Group)
                     v.names = "Age",
                     timevar = "Year",
                     times = names(df)[-c(1,2)],
                     direction = "long")

# 过滤空值并转换Age为数值型
long_data <- long_data[!is.na(long_data$Age), ]
long_data$Age <- as.numeric(long_data$Age)

# 用aggregate统计计数
final_result <- aggregate(data = long_data,
                          Count ~ Group + Age + Sex,
                          FUN = length)

结果说明

最终的final_result表包含四列:Group(品种组)、Age(年龄)、Sex(性别)、Count(对应分组的个体数量),完全匹配你的统计需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:32:45