我需要幫助解決這個問題:
我有一個充滿 .txt 檔案的目錄,如下所示:
file1.no
file2.no
file3.no
每個檔案都具有以下結構(我只關心 .txt 中的前兩個“列”):
#POS SEQ SCORE QQ-INTERVAL STD MSA DATA
#The alpha parameter 0.75858
#The likelihood of the data given alpha and the tree is:
#LL=-4797.62
1 M 0.3821 [0.01331,0.5465] 0.4421 7/7
2 E 0.4508 [0.05393,0.6788] 0.5331 7/7
3 L 0.5334 [0.05393,0.6788] 0.6279 7/7
4 G 0.5339 [0.05393,0.6788] 0.624 7/7
而且我想將它們全部決議為一個DataFrame,同時還將列轉換為每一行的串列(即,第一列應該轉換為這樣的字串:)["MELG"]。
但是現在我遇到了兩個問題:
如何讀取不同的檔案并將它們全部附加到單個 DataFrame 中,以及從所述檔案中的所有行中創建單個列
如何決議這些檔案,因為幾乎所有列之間的空間都不同。
我的輸出應該是這樣的:
|File |SEQ |SCORE|
| --- | ---| --- |
|File1|MELG|0.3821,0.4508,0.5334,0.5339|
|File2|AAHG|0.5412,1,2345,0.0241,0.5901|
|File3|LLKM|0.9812,0,2145,0.4142,0.4921|
因此,第一個檔案 (file1.no) 的第一列,即單個字母的列,現在位于一個串列中,在一行中包含該檔案中的所有資訊,并且 DataFrame 每個檔案都有一行。
歡迎任何幫助,在此先感謝。
uj5u.com熱心網友回復:
這是一個適合您的示例代碼:
using DataFrames
function parsefile(filename)
l = readlines(filename)
filter!(x -> !startswith(x, "#"), l)
sl = split.(l)
return (File=filename,
SEQ=join(getindex.(sl, 2)),
SCORE=parse.(Float64, getindex.(sl, 3)))
end
df = DataFrame()
foreach(fn -> push!(df, parsefile(fn)), ["file$i.no" for i in 1:3])
您的結果將在df資料框中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475900.html
