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

R语言中双胞胎数据集DataFrame重塑的实现方法咨询

实现方案

1. tidyverse 方案(可读性高,易调整)

首先加载依赖包,测试数据和你给出的结构一致,你可以直接替换成自己的原始数据框:

# 加载依赖
library(dplyr)
library(tidyr)

# 你的原始数据框,替换为自己的即可
twins_raw <- data.frame(
  ID = c(2891, 2892, 4000, 4001, 4006, 4007),
  zyg.x = c(2,2,1,1,2,2),
  CDsum = c(0,5,0,0,0,3)
)

处理代码:

twins_result <- twins_raw %>%
  # 每2行划为一对,生成配对序号
  mutate(pair_idx = rep(1:(n()/2), each = 2),
         # 标记同对双胞胎的序号
         twin_tag = paste0("CDsumTwin", 1:2)) %>%
  # 长表转宽表,拆分CDsum为两个双胞胎的单独列
  pivot_wider(
    id_cols = c(pair_idx, zyg.x),
    names_from = twin_tag,
    values_from = CDsum,
    values_fn = list(CDsum = identity, ID = list)
  ) %>%
  # 构造要求格式的配对名称列
  mutate(`Twin Pair` = paste0("pair", pair_idx, "(", ID[[1]], ",", ID[[2]], ")")) %>%
  # 调整列顺序、重命名列匹配目标格式
  select(`Twin Pair`, zyg = zyg.x, CDsumTwin1, CDsumTwin2)

2. 基础R方案(无需安装额外包)

n_row <- nrow(twins_raw)
pair_count <- n_row %/% 2
# 分别提取每对的1号、2号样本
twin1 <- twins_raw[seq(1, n_row, 2), ]
twin2 <- twins_raw[seq(2, n_row, 2), ]
# 合并构造结果
twins_result <- data.frame(
  `Twin Pair` = paste0("pair", 1:pair_count, "(", twin1$ID, ",", twin2$ID, ")"),
  zyg = twin1$zyg.x,
  CDsumTwin1 = twin1$CDsum,
  CDsumTwin2 = twin2$CDsum,
  check.names = FALSE # 保留列名中的空格
)

注意事项

如果你的原始数据存在不成对的多余行,运行前先执行以下代码截除异常行:

twins_raw <- twins_raw[1:(floor(nrow(twins_raw)/2)*2), ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:04