csv 按唯一列ID拆分大型 Dataframe 并打印到新txt文件

5kgi1eie  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(96)

我有一个来自单个.txt文件的大型 Dataframe ,其中有超过90,000行,跨越~85个唯一的字符ID:
| 区域|字符|中间位置|N位点|第一|
| - -|- -|- -|- -|- -|
| 小行星12323|一百零二|小行星37500|小行星20012| 0.387763单位|
| 小行星12323|一百零二|六二五○ ○|小行星17353| 0.359275单位|
| 小行星12323|一百零二|小行星87500|小行星20059| 0.360935单位|
| 小行星12323|一百零二|小行星112500|小行星20132| 0.447558单位|
| 小行星12323|一百零二|小行星137500|小行星17996| 0.476738美元|
| 小行星12323|一百零二|小行星162500|小行星20275| 0.363752单位|
| 小行星12323|一百零二|小行星187500|小行星13649|千分之五三零六一|
| 小行星12323|一百零三|小行星262500|小行星8897| 0.629894单位|
| 小行星12323|一百零三|小行星287500|小行星18855| 0.360819单位|
| 小行星12323|一百零三|小行星312500|小行星19559| 0.486737单位|
| 小行星12323|一百零三|小行星337500|小行星19973| 0.501365单位|
| 小行星12323|一百零四|小行星362500|小行星19102| 0.361309单位|
| 小行星12323|一百零四|小行星387500|小行星18688| 0.33万1698元|
| 小行星12323|一百零四|小行星412500|小行星18620| 0.548834单位|
我想做的是按chr ID分组,这样我就得到一个.txt文件,其中只包含属于唯一chr ID的行,105.txt,并且只包含那些匹配的行。因此文件102.txt看起来如下所示:
| 区域|字符|中间位置|N位点|第一|
| - -|- -|- -|- -|- -|
| 小行星12323|一百零二|小行星37500|小行星20012| 0.387763单位|
| 小行星12323|一百零二|六二五○ ○|小行星17353| 0.359275单位|
| 小行星12323|一百零二|小行星87500|小行星20059| 0.360935单位|
| 小行星12323|一百零二|小行星112500|小行星20132| 0.447558单位|
| 小行星12323|一百零二|小行星137500|小行星17996| 0.476738美元|
| 小行星12323|一百零二|小行星162500|小行星20275| 0.363752单位|
| 小行星12323|一百零二|小行星187500|小行星13649|千分之五三零六一|
我知道在R中我可以通过chrID拆分df:

df<-read.table('master_dataframe.txt', header=TRUE)
data_list <- split(df, f = df$chr)
head(df)

但是我如何用唯一的ID打印出每一个呢?谢谢你的任何建议/帮助!

c6ubokkw

c6ubokkw1#

你可以列出所有的唯一ID,然后使用for循环遍历每个唯一的D,然后打印每次迭代的结果。

list_ids <- c(‘list here’) 

for (i in unique(list_ids)){
print(subset(list_ids, chr==i))
}
plupiseo

plupiseo2#

好的,事实证明这是非常直接的使用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文件中。它添加了一个新的第一列,其中包含主数据框中的行行号。我没有弄清楚如何在Python中防止这种情况,但使用了一些UNIX脚本来修复它:

for i in fst_*.txt ;
do
    name1=${i%.*};
    name2=${name1%_*};
cut -f2,3,4,5,6 "$name1".txt > "$name2".txt
done

可能是一些不好的东西,但它做到了。

相关问题