如何在julia中仅将列的子集读入数据帧?

如何在julia中仅将列的子集读入数据帧?,julia,Julia,我有这样一个文件: chr1 47727 47778 2PJ3LS1:190:C5R7BACXX:3:2202:6839:64070 1 + chr1 48132 48183 2PJ3LS1:190:C5R7BACXX:3:2109:14612:23955 60 + chr1 49316 49367 2PJ3LS1:190:C5R7BACXX:3:1107:8369:30676 1 + chr1 57049 57100 2P

我有这样一个文件:

chr1    47727   47778   2PJ3LS1:190:C5R7BACXX:3:2202:6839:64070 1   +
chr1    48132   48183   2PJ3LS1:190:C5R7BACXX:3:2109:14612:23955    60  +
chr1    49316   49367   2PJ3LS1:190:C5R7BACXX:3:1107:8369:30676 1   +
chr1    57049   57100   2PJ3LS1:190:C5R7BACXX:3:1205:2852:33393 60  -
chr1    59296   59347   2PJ3LS1:190:C5R7BACXX:3:2306:14160:96792    1   -
chr1    62116   62165   2PJ3LS1:190:C5R7BACXX:3:1203:3949:66047 60  +
chr1    64636   64687   2PJ3LS1:190:C5R7BACXX:3:2112:11315:75619    60  -
chr1    108831  108882  2PJ3LS1:190:C5R7BACXX:3:2211:11748:76230    60  +
chr1    150522  150573  2PJ3LS1:190:C5R7BACXX:3:2108:11820:88376    60  -
chr1    180744  180794  2PJ3LS1:190:C5R7BACXX:3:2115:5327:39987 60  -

我不关心第4列和第5列。在阅读我的巨型文件时,有可能忽略这些吗?CSV.read中没有允许这样做的内容。

这不是一个CSV文件,所以我宁愿直接解析它(这不是最高效率,但在大多数情况下应该足够好):

编辑:如果您还想使用第6列(我假设最后一列是
Char
):


如果您使用的是Linux,那么可以使用awk创建另一个文件,其中只包含所需的列。在朱莉娅:

run(pipeline(`awk '{print $1, $2, $3, $6}' filename.txt`, "otherfile.txt"))
df = CSV.read("otherfile.txt",delim=" ")

我不知道它是否是最有效的,因为它涉及到创建一个中间文件,但是非常简单,允许您在以后需要时保存该文件。要删除它们中的任何一个或两者,只需运行
rm(“anyfile.txt”)

CSV.read需要一个delim:)您的答案考虑的列数不超过三列,对吗?是的
a
b
c
只考虑前三列。您的文件的问题是每行的列数不同。实际上,您可以使用
CSV.read
在中解析此文件将来,但当前在
ignorerepeated
关键字参数中有一个bug。修复后,您将能够编写类似
CSV.read(“filename.txt”,delim=“”,ignorerepatted=true,header=[“a”,“b”,“c”])
的内容,以获得您想要的内容(但由于它现在不起作用,我不推荐它).Oh-实际上每行中有相同数量的列。无论如何-这不会改变我的建议。我的文件是常规文件,6列选项卡分开。这只是它不以这种方式显示:)此外,您可以查看CSV.jl创建者推荐的方法。
df = DataFrame(a=String[], b=Int[], c=Int[], d=Char[])
for line in eachline("filename.txt")
    a, b, c, _, _, d = split(line)
    push!(df, (String(a), parse(Int, b), parse(Int, c)), d[1]) 
end
run(pipeline(`awk '{print $1, $2, $3, $6}' filename.txt`, "otherfile.txt"))
df = CSV.read("otherfile.txt",delim=" ")