我有一个.gz文件,其中包含一个大文本文件。结构如下所示:
propVarQ,0.1
multiplier,2.0
p,1,chr1,3
p,1,locus1,80828536,35.735,0.43562663
p,1,snp,1,80828735,G/A,GGGGGGAG,G,0.9166667
p,1,p,7699,0.09534625
p,1,p,317,0.09534625
p,1,p,6181,0.09534625
p,1,p,6570,0.09534625
p,1,p,2370,0.09534625
重复大约1000次。我需要在R中解析它(虽然python也是一个选项,但我对R更熟悉),这样它就只为第三个值为“snp”的行返回第二个值(在本例中是1),第八个值(在本例中是G)(在本例中是第5行)。在这个例子中,我期望的结果是:
1 G
到目前为止,我得出的结论如下:
maf <- file("file.gz")
maflist <- strsplit(readLines(maf), ",")
close(maf)
maflist[maflist[,3]=="snp",]
但是我得到了不正确的维数。我在读取文件时遇到了问题,因为每行中的列数不相等,这就是我最终使用strsplit
的原因。如果有更好的办法,我愿意。你知道吗
strsplit返回一个列表,其中每个列表项包含一个拆分值向量。所以列表的长度与输入的长度相同。你不能像矩阵那样索引到它。你可以这样做
对列表进行子集化,以仅获取向量中第三项为“snp”的行。你知道吗
你知道,如果你在unix机器上,
awk
会让这变得非常简单。像这样的这里有一种使用
data.table
的fread
的方法:我们解压文件并为那些包含
,snp
的行grep
,然后使用select
参数选择列2
和8
。你知道吗这将提供:
HTH公司
也许读入这些行并过滤它们,使其仅包含您感兴趣的内容
然后将所选行作为数据框从文本连接
相关问题 更多 >
编程相关推荐