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

如何在R中基于现有数据表创建男女得分分列存储的新表

R实现长表转性别分列宽表方案

以下两种方案均可以实现需求,你可以根据使用习惯选择:

前置准备:示例原始数据(可替换为你的实际数据表)

df <- data.frame(gender = rep(c("male", "female"), c(3,2)), score = c(85,92,78,95,88))

方法1:使用tidyverse生态(dplyr + tidyr,适合习惯tidy语法的用户)

  1. 先加载依赖包
    library(tidyverse)
  2. 执行转换代码
new_df <- df %>%
  # 按性别分组
  group_by(gender) %>%
  # 为每个性别内的得分生成顺序编号,用于后续对齐行数
  mutate(row_id = row_number()) %>%
  # 把gender列的取值转为新列名,score作为对应列的值
  pivot_wider(names_from = gender, values_from = score) %>%
  # 删除用于对齐的辅助编号列
  select(-row_id)

注:如果男女样本数量不一致,样本更少的列空缺位置会自动填充NA

方法2:base R原生实现(无需安装额外包)

# 按性别拆分得分到独立向量
score_list <- split(df$score, df$gender)
# 取两个性别最大的样本数作为新表行数
max_len <- max(lengths(score_list))
# 初始化新表
new_df <- data.frame(
  male = rep(NA, max_len),
  female = rep(NA, max_len)
)
# 填充对应性别的得分
new_df$male[1:length(score_list$male)] <- score_list$male
new_df$female[1:length(score_list$female)] <- score_list$female

小提示:如果你的数据中男女样本数量完全一致,可以用更简洁的写法:
new_df <- data.frame(male = df$score[df$gender == "male"], female = df$score[df$gender == "female"])

结果验证

执行head(new_df)即可查看生成的新表结构,确认符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:54:00