如何在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=" ")