如何用R实现CSV文件中SNP样本数据的行转列?
使用R实现SNP样本数据的格式转换
原始数据结构
假设你的CSV数据如下:
| SNP_Name | Sample_ID | Alle1-Forward | Allele2-Backward |
|---|---|---|---|
| rs12345 | JJ37 | T | T |
| rs12345 | JJ47 | C | C |
| rs67890 | JJ12 | A | A |
| rs67890 | JJ37 | A | G |
目标格式
需要转换为以Sample_ID为行、SNP名称为列的宽格式,缺失值用N/A填充:
| Sample_ID | rs12345 | rs67890 |
|---|---|---|
| JJ37 | T,T | A,G |
| JJ47 | C,C | N/A |
| JJ12 | N/A | A,A |
具体实现步骤
1. 准备依赖包
先确保安装了tidyverse包(包含数据处理所需的dplyr和tidyr工具),未安装则执行:
install.packages("tidyverse")
加载包:
library(tidyverse)
2. 加载数据
你可以选择读取本地CSV文件,或者直接构造测试数据:
方式一:读取本地CSV文件
# 替换为你的实际文件路径 snp_df <- read.csv("snp_data.csv", stringsAsFactors = FALSE)
方式二:构造测试数据(快速验证用)
snp_df <- data.frame( SNP_Name = c("rs12345", "rs12345", "rs67890", "rs67890"), Sample_ID = c("JJ37", "JJ47", "JJ12", "JJ37"), `Alle1-Forward` = c("T", "C", "A", "A"), `Allele2-Backward` = c("T", "C", "A", "G"), stringsAsFactors = FALSE )
3. 合并等位基因列
将两列等位基因用逗号拼接成基因型字符串:
snp_df <- snp_df %>% mutate(Genotype = paste(`Alle1-Forward`, `Allele2-Backward`, sep = ","))
注:列名含连字符,必须用反引号`包裹才能正确引用
4. 转换为宽格式
使用pivot_wider函数重塑数据,自动填充缺失值为N/A:
result_df <- snp_df %>% select(Sample_ID, SNP_Name, Genotype) %>% pivot_wider( names_from = SNP_Name, values_from = Genotype, values_fill = list(Genotype = "N/A") )
5. 查看结果
打印转换后的数据集:
print(result_df)
运行以上代码后,即可得到符合要求的目标格式数据。
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

