Как прочитать только подмножество столбцов в кадре данных в Юлии? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть файл, подобный следующему:

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 нет ничего, что позволяло бы это.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Если вы работаете в Linux, вы можете использовать awk для создания другого файла только с теми столбцами, которые вам нужны.В Julia:

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

Я не знаю, является ли он наиболее эффективным, поскольку он включает в себя создание промежуточного файла, но довольно прост и позволяет сохранить файл, если он понадобится позже.Для удаления любого из них или обоих просто запустите rm("anyfile.txt).

0 голосов
/ 03 октября 2018

Что ж, это не файл CSV, поэтому я бы лучше проанализировал его напрямую (это не максимально эффективно, но в большинстве случаев должно быть достаточно):

df = DataFrame(a=String[], b=Int[], c=Int[])
for line in eachline("filename.txt")
    a, b, c = split(line)
    push!(df, (String(a), parse(Int, b), parse(Int, c))) 
end

РЕДАКТИРОВАТЬ: если вы хотитетакже используется столбец 6 (я предполагаю, что последний столбец Char):

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
...