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

在R语言中将data.frame转换为指定格式新数据框的方法

R语言宽表转长表实现方法

你要的这种转换属于宽表转长表,R里有两种通用且高效的方法,不管数据框多大都能适用:

方法一:使用tidyverse包的pivot_longer(推荐,语法更直观)

首先需要加载tidyverse包,未安装的话先运行install.packages("tidyverse"):

library(tidyverse)

# 转换并调整列名
df <- x %>%
  pivot_longer(
    cols = starts_with("a"),  # 指定要转换的目标列(这里匹配a1、a2、a3)
    names_to = "name",        # 原列名存入新列`name`
    values_to = "allele"      # 原列值存入新列`allele`
  ) %>%
  rename(sample.size = samplesize)  # 将原列名`samplesize`改为`sample.size`

# 查看转换结果
df

方法二:使用base R的reshape函数(无需额外安装包)

如果不想依赖第三方包,可以用R自带的reshape函数:

df <- reshape(
  x,
  varying = c("a1", "a2", "a3"),  # 要转换的列
  v.names = "allele",             # 存储原列值的新列名
  timevar = "name",               # 存储原列名的新列名
  times = c("a1", "a2", "a3"),    # 原列名的取值集合
  direction = "long",             # 指定转换方向为长表
  idvar = c("location", "samplesize")  # 保留不参与转换的列
) %>%
  rename(sample.size = samplesize) %>%  # 调整列名匹配目标格式
  arrange(location, name) %>%          # 按location和name排序(与示例结果对齐)
  select(-id)  # 移除自动生成的id列

# 查看转换结果
df

两种方法都能生成你需要的目标数据框:tidyverse的写法更简洁易读,处理大数据框的效率也很出色;base R方法无需额外依赖,适合环境受限的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:35:14