在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
相关产品推荐
相关产品推荐

