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))