如何判定TXT文件分隔符类型并正确导入数据?
如何正确导入TXT格式的基因数据
我有一份TXT格式的基因数据,尝试用R的tidyverse包导入,但遇到了格式问题:
尝试1:用空格作为分隔符
运行代码:
library(tidyverse) data <- read_delim("<PATH>\\pgc.cross.SCZ17.2013-05.txt", delim = " ") head(data)
返回结果:
# A tibble: 6 × 12 snpid hg18chr bp a1 a2 or se pval info ngt CEUaf <chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> 1 "rs3131… NA NA NA NA NA NA NA NA NA NA 2 "rs3131… NA NA NA NA NA NA NA NA NA NA 3 "rs3131… NA NA NA NA NA NA NA NA NA NA 4 "rs1048… NA NA NA NA NA NA NA NA NA NA 5 "rs1256… NA NA NA NA NA NA NA NA NA NA 6 "rs4040… NA NA NA NA NA NA NA NA NA NA # … with 1 more variable: ...12 <lgl> # ℹ Use `colnames()` to see all variable names
所有数值列都变为NA,导入失败。
尝试2:用制表符作为分隔符
运行代码:
data <- read_delim("<PATH>\\pgc.cross.SCZ17.2013-05.txt", delim = "\t") head(data)
返回结果:
# A tibble: 6 × 1 `snpid hg18chr bp a1 a2 or se pval info ngt CEUaf ` <chr> 1 "rs3131972\t1\t742584\tA\tG\t1\t0.0966\t0.9991\t0.702\t0\t0.16055" 2 "rs3131969\t1\t744045\tA\tG\t1\t0.0925\t0.9974\t0.938\t0\t0.133028" 3 "rs3131967\t1\t744197\tT\tC\t1.001\t0.0991\t0.9928\t0.866\t0\t." 4 "rs1048488\t1\t750775\tT\tC\t0.9999\t0.0966\t0.9991\t0.702\t0\t0.8364… 5 "rs12562034\t1\t758311\tA\tG\t1.025\t0.0843\t0.7716\t0.988\t0\t0.0925… 6 "rs4040617\t1\t769185\tA\tG\t0.9993\t0.092\t0.994\t0.979\t0\t0.87156"
所有数据被合并到一列,导入不符合预期。
但用Sublime Text打开该文件时,数据为正常分列显示(见截图:Sublime Text中正常显示的数据)。
解决方案
问题出在文件的引号转义和实际分隔符上:每一行数据被双引号包裹,内部用制表符分隔,read_delim默认会将引号内内容视为整体,导致识别错误。可通过以下两种方法解决:
方法1:调整read_delim参数
明确指定引号规则、制表符分隔符,并开启空格修剪:
library(tidyverse) data <- read_delim("<PATH>\\pgc.cross.SCZ17.2013-05.txt", delim = "\t", quote = "\"", trim_ws = TRUE) head(data)
方法2:使用read.table
read.table对带引号的制表符分隔文件兼容性更好,直接指定参数即可:
data <- read.table("<PATH>\\pgc.cross.SCZ17.2013-05.txt", sep = "\t", quote = "\"", header = TRUE, stringsAsFactors = FALSE) head(data)
两种方法都能正确解析文件,得到与Sublime Text中一致的分列格式。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

