手动修改.bgen配套.sample文件:如何在R中导出带双表头的.txt文件?
解决plink识别.bgen配套.sample文件第二表头报错的方案
plink要求的.bgen配套.sample文件格式固定为:
- 第1行:列名表头
- 第2行:各列数据类型标识(ID_1、ID_2、missing列对应值为0,sex列是离散编码填D)
- 第3行及之后:实际样本数据,行数必须和.bgen文件的样本数完全一致
你当前报错的两个核心原因:
- 第二行的类型标识格式错误,带括号和逗号,导致plink无法识别为第二表头,直接将其判定为第一行样本,最终样本计数多1
- 你把类型标识行放到了样本数据框中导出,导致真实样本行数和.bgen不匹配
方案1:R中直接导出符合规范的.sample文件
首先确认你的samples数据框已经删掉了那行(0, 0, 0, D)的内容,只保留26622行真实样本数据,再运行以下代码:
# 创建文件连接 con <- file("samples_bgen.sample", "w") # 写入第一行表头 writeLines("ID_1 ID_2 missing sex", con) # 写入第二行类型表头,无括号无逗号,空格分隔 writeLines("0 0 0 D", con) # 写入所有样本数据,不需要再输出列名 write.table( x = samples, file = con, sep = " ", row.names = FALSE, col.names = FALSE, quote = FALSE ) # 关闭文件连接 close(con)
方案2:直接修改已导出的.txt文件
如果不想重新运行R导出,可以直接修改现有文件:
- 打开
samples_bgen.txt,删除第二行里的括号和逗号,把(0, 0, 0, D)改成0 0 0 D - 检查样本数据部分:如果第二行原来属于数据框的第一行,就删掉数据部分多出来的那行类型标识内容,保证从第三行开始的真实样本数刚好是26622行
- 改后缀为
.sample即可
验证
修改完成后重新运行你的plink命令:
plink --bgen data.bgen --sample samples_bgen.sample --make-bed --out data_output
即可正常执行,不会再报样本数不匹配或第二表头无效的错误。
内容的提问来源于stack exchange,提问作者Emilie
相关产品推荐
相关产品推荐

