我从一个像这样的.txt文件中获得了一个大数据帧,其中我有>90000行,跨越~85个唯一的chr-ID:
region | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1223 | 1223 | 12323 | 1223 | 112323 | 12323 | 12323 | 112323 | 112323 | 112323 | 12323 | 103 | 337500 | >td style="text-align:left;">19973.501365[/tr>||||||||||
1223 | 112323 | 12323 |
您可以列出所有唯一的ID。然后使用for循环对每个唯一的D进行迭代,然后打印每次迭代的结果。
list_ids <- c(‘list here’)
for (i in unique(list_ids)){
print(subset(list_ids, chr==i))
}
好吧,事实证明这实际上是非常直接的使用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文件中。这样做的一件事是,对于每个新的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
可能是一些刺耳的东西,但它完成了。。。