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

R语言操作CSV文件:如何将长格式男女年龄数据拆分为两个独立列

R语言长格式性别年龄数据转宽格式实现方案

现有体量较大的CSV数据集采用长格式存储性别与对应年龄数据,需转换为宽格式,拆分出男性年龄、女性年龄两个独立列。原数据示例结构如下:

Sex Age
M 18
F 20
M 65
F 36
M 49
M 27
F 38

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

该方法依赖tidyverse生态工具,代码逻辑清晰易维护:

# 加载依赖包
library(tidyverse)

# 读取CSV源数据
df <- read_csv("你的数据文件路径.csv")

# 执行长转宽操作
df_wide <- df %>%
  # 按性别分组生成组内行号,避免转宽时数据折叠
  group_by(Sex) %>%
  mutate(grp_id = row_number()) %>%
  ungroup() %>%
  pivot_wider(
    names_from = Sex,
    values_from = Age,
    names_prefix = "年龄_"
  ) %>%
  # 删除辅助生成的分组id列
  select(-grp_id)

处理完成后将得到年龄_M(男性年龄)、年龄_F(女性年龄)两列,长度不一致的部分自动填充为NA。

方法2:基础R实现(无需第三方依赖)

如果运行环境不允许安装额外包,可使用基础R语法实现:

# 读取CSV源数据
df <- read.csv("你的数据文件路径.csv")

# 按性别分别提取年龄向量
male_age <- df$Age[df$Sex == "M"]
female_age <- df$Age[df$Sex == "F"]

# 统一两个向量的长度,较短的向量末尾补NA
max_len <- max(length(male_age), length(female_age))
length(male_age) <- max_len
length(female_age) <- max_len

# 合并为宽格式数据框
df_wide <- data.frame(
  男性年龄 = male_age,
  女性年龄 = female_age
)

大体量数据优化方案

如果数据量超过100万行,推荐使用data.table包处理,运算效率远高于前两种方案:

library(data.table)

# 快速读取大体积CSV
dt <- fread("你的数据文件路径.csv")

# 长转宽处理
dt_wide <- dcast(dt, rowid(Sex) ~ Sex, value.var = "Age")[, Sex := NULL]

# 重命名为中文列名
setnames(dt_wide, old = c("M", "F"), new = c("男性年龄", "女性年龄"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:24:01