我有一個來自單個 .txt 檔案的大型資料框,像這樣,我有 >90,000 行跨越約 85 個唯一 chr ID:
| 地區 | chr | 中位 | 網站 | fst |
|---|---|---|---|---|
| 12323 | 102 | 37500 | 20012 | 0.387763 |
| 12323 | 102 | 62500 | 17353 | 0.359275 |
| 12323 | 102 | 87500 | 20059 | 0.360935 |
| 12323 | 102 | 112500 | 20132 | 0.447558 |
| 12323 | 102 | 137500 | 17996 | 0.476738 |
| 12323 | 102 | 162500 | 20275 | 0.363752 |
| 12323 | 102 | 187500 | 13649 | 0.53061 |
| 12323 | 103 | 262500 | 8897 | 0.629894 |
| 12323 | 103 | 287500 | 18855 | 0.360819 |
| 12323 | 103 | 312500 | 19559 | 0.486737 |
| 12323 | 103 | 337500 | 19973 | 0.501365 |
| 12323 | 104 | 362500 | 19102 | 0.361309 |
| 12323 | 104 | 387500 | 18688 | 0.331698 |
| 12323 | 104 | 412500 | 18620 | 0.548834 |
我想做的是按 chr ID 分組,以便我得到一個 .txt 檔案,其中僅包含屬于唯一 chr ID 的那些行,并且每個檔案都帶有唯一 chr ID。例如,對于我的玩具 df,我想將其拆分為 3 個檔案,其中每個檔案將命名為 103.txt、104.txt、105.txt,并且僅包含匹配的行。所以檔案 102.txt 看起來像:
| 地區 | chr | 中位 | 網站 | fst |
|---|---|---|---|---|
| 12323 | 102 | 37500 | 20012 | 0.387763 |
| 12323 | 102 | 62500 | 17353 | 0.359275 |
| 12323 | 102 | 87500 | 20059 | 0.360935 |
| 12323 | 102 | 112500 | 20132 | 0.447558 |
| 12323 | 102 | 137500 | 17996 | 0.476738 |
| 12323 | 102 | 162500 | 20275 | 0.363752 |
| 12323 | 102 | 187500 | 13649 | 0.53061 |
我知道在 RI 中可以通過 chrID 拆分 df:
df<-read.table('master_dataframe.txt', header=TRUE)
data_list <- split(df, f = df$chr)
head(df)
但是如何用唯一的 ID 列印每一個?感謝您的任何建議/幫助!
uj5u.com熱心網友回復:
您可以列出所有唯一 ID。然后使用 for 回圈遍歷每個唯一的 D,然后列印每次迭代的結果。
list_ids <- c(‘list here’)
for (i in unique(list_ids)){
print(subset(list_ids, chr==i))
}
uj5u.com熱心網友回復:
好的,事實證明這實際上使用 python 非常簡單。這就是我最終要做的。
cf = pd.read_csv('inputDataframe.txt', sep=" ", header = None, names = ["region", "chr", "midPos", "Nsites", "fst"])
grouped = df.groupby(df['chr'])
for name in df['chr'].unique():
temporary_df = grouped.get_group(name)
print(temporary_df)
temporary_df.to_csv(f'fst_{name}_raw.txt',sep='\t')
因此,我采用了上述結構的 .txt 檔案,然后使用 python 腳本將其讀入,按 chr ID 分組,然后 for 回圈遍歷并獲取每個唯一的 chr ID 并將其列印到新的 .txt 檔案中。 txt 檔案。這樣做的一件事是為每個新的 chr.txt 檔案添加一個新的第一列,其中包含主資料框中的行號。我沒有弄清楚如何在 python 中防止這種情況,但使用了一些 unix 腳本來修復它:
for i in fst_*.txt ;
do
name1=${i%.*};
name2=${name1%_*};
cut -f2,3,4,5,6 "$name1".txt > "$name2".txt
done
可能是一些亂七八糟的東西,但它完成了......
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515563.html
標籤:r数据框CSV分裂
上一篇:Python塊寫入excel
下一篇:從每行中僅提取第一次出現的字串
