Python 基于列名将矩阵文件拆分为多个文件

Python 基于列名将矩阵文件拆分为多个文件,python,r,Python,R,我有一个很大的以制表符分隔的文件,有数千列和数千行。它看起来像: ID A_1 A_2 A_3 B_1 B_3 B_4 C_2 C_3 C_5 xx 01 02 03 04 05 06 07 08 09 xy 03 05 33 44 15 26 27 08 09 我想将此表拆分为多个文件: # A.txt ID A_1 A_2 A_3 xx 01 02 03 xy 03 05 33 # B.txt ID B_1 B_3 B_4 xx 04

我有一个很大的以制表符分隔的文件,有数千列和数千行。它看起来像:

ID  A_1 A_2 A_3 B_1 B_3 B_4 C_2 C_3 C_5
xx  01  02  03  04  05  06  07  08  09
xy  03  05  33  44  15  26  27  08  09
我想将此表拆分为多个文件:

# A.txt
ID A_1 A_2 A_3
xx 01  02  03
xy 03  05  33  

# B.txt
ID B_1 B_3 B_4
xx 04  05  06
xy 44  15  26  

# C.txt
ID C_2 C_3 C_5
xx 07  08  09
xy 27  08  09
因此,文件名将是列标题前缀。Id列在每个文件中都是固定的。每个文件中的其余列基于下划线之前的公共前缀


如何在Linux/Bash/Perl/python命令中执行此操作?

我们可以在
R
中的列名子字符串上使用
split.default
作为
data.frame
s的
列表

nm1 <- sub("_\\d+", "", names(df1)[-1])
lst <- lapply(split.default(df1[-1], nm1), transform, ID = df1$ID)
数据
df1谢谢。如何读取表文件(myfile.txt)并在R中一次拆分后按列前缀名称自动保存多个文件?让我知道完整的代码。学习R。否则,除了R代码外,其他代码会很有帮助。@Jishan数据集被拆分为一个
列表
。您可以使用
lappy
列表
(或
for
循环)中循环读取多个文件,即
lappy(filenames,read.table)
列表中。我是R新手。如何在R中一次拆分后按列前缀名称自动保存多个文件?让我知道完整的代码please@Jishan试试这个
lappy(名称(lst),函数(x)write.csv(粘贴0(x,.csv),lst[[x]],row.names=FALSE,quote=FALSE))
df1你已经试过自己解决这个问题了吗?“你被困在什么地方了吗?”辛巴基。当我发布答案时,有一个
R
标签。你用awk标签替换了这个标签。这里的落选可能是因为你要求别人为你工作,而没有表现出你自己的努力。
setNames(Map(cbind, ID = df1['ID'], 
     split.default(df1[-1], nm1)), unique(nm1))
#$A
#  ID A_1 A_2 A_3
#1 xx   1   2   3
#2 xy   3   5  33

#$B
#  ID B_1 B_3 B_4
#1 xx   4   5   6
#2 xy  44  15  26

#$C
#  ID C_2 C_3 C_5
#1 xx   7   8   9
#2 xy  27   8   9
df1 <- structure(list(ID = c("xx", "xy"), A_1 = c(1L, 3L), A_2 = c(2L, 
5L), A_3 = c(3L, 33L), B_1 = c(4L, 44L), B_3 = c(5L, 15L), B_4 = c(6L, 
26L), C_2 = c(7L, 27L), C_3 = c(8L, 8L), C_5 = c(9L, 9L)),
class = data.frame", row.names = c(NA, -2L))