R 基于列拆分数据帧,并写出具有特定名称的多个Split.txt文件
我正在处理由微观数据生成的巨大.txt数据帧。它的每个.txt输出文件大约为3到4 GB!我有几百个 对于这些怪物文件中的每一个,它都有数百个特性,有些是分类的,有些是数字的 以下是数据帧的抽象示例:R 基于列拆分数据帧,并写出具有特定名称的多个Split.txt文件,r,dataframe,split,R,Dataframe,Split,我正在处理由微观数据生成的巨大.txt数据帧。它的每个.txt输出文件大约为3到4 GB!我有几百个 对于这些怪物文件中的每一个,它都有数百个特性,有些是分类的,有些是数字的 以下是数据帧的抽象示例: df <- read.csv("output.txt", sep="\t", skip = 9,header=TRUE, fill = T) df Row Column stimulation Compound Concentration treatmentsum Pid_treatme
df <- read.csv("output.txt", sep="\t", skip = 9,header=TRUE, fill = T)
df
Row Column stimulation Compound Concentration treatmentsum Pid_treatmentsum var1 var2 var3 ...
1 1 uns Drug1 3 uns_Drug1_3 Jack_uns_Drug1_3 15.0 20.2 3.568 ...
1 1 uns Drug1 3 uns_Drug1_3 Jack_uns_Drug1_3 55.0 0.20 9.068
1 1 uns Drug2 5 uns_Drug2_5 Jack_uns_Drug2_5 100 50.2 3.568
1 1 uns Drug2 5 uns_Drug2_5 Jack_uns_Drug2_5 75.0 60.2 13.68
1 1 3S Drug1 3 3s_Drug3_3 Jack_3s_Drug1_3 65.0 30.8 6.58
1 1 4S Drug1 3 4s_Drug3_3 Jack_4s_Drug1_3 35.0 69.3 2.98
.....
这并不是说它用正确的标题写出了所有单独的文件,但它们不是.txt,如果我在excel中打开它们,我会收到警告消息说它们已损坏。同时在R中,我收到警告消息文件中的错误(文件,ifelse(附加“a”、“w”): 无法打开连接 我哪里弄错的 考虑到显微镜下每个输出文件的绝对大小(3-4GB),这是最好的方法吗 如果我能更进一步,我能将数百个巨大的文件转储到一个文件夹中吗?我能写一个循环来自动匹配这个过程而不是一次拆分一个文件吗?我预见到的唯一问题是显微镜输出文件总是有相同的名称,标题是“输出” 提前谢谢你,很抱歉发了这么长的邮件 干杯,
ML我不认为这与OP的代码有什么不同,但它是这样的 首先,测试数据集。我将使用内置数据集的副本
iris
df <- iris
names(df)[5] <- "Pid_treatmentsum"
我不相信这和OP的代码有什么不同,但它是这样的 首先,测试数据集。我将使用内置数据集的副本
iris
df <- iris
names(df)[5] <- "Pid_treatmentsum"
如果您想要正确的扩展名,您可以尝试粘贴0(“Jack”,x,.txt”)在
lappy
中命名您的文件。如果您想要正确的扩展名,您可以尝试粘贴0(“Jack,x,.txt”)在lappy
中命名您的文件。谢谢,这非常有效。很抱歉,与OP相比,这可能不够有创意。我对编程太陌生了。我在向你们学习,如果我能问一个假问题,你能解释一下(独特的(DF[[“Pid_treatmentsum”]])部分吗?更具体地说,DF[[]}对字符串PiD\u treatmentsum做了什么?我想从已经分割的数据帧中获取所有“PiD\u treatmentsum”的向量/矩阵,并且unique将返回一个向量,因为它们在任何给定的分割数据帧中都具有相同的“PiD\u treatmentsum”?我希望我没有失去您:(我能在什么地方读到更多关于这个的信息吗?@ML33M我用[[
因为它在一个函数中,在编程时,这是推荐的提取器,而不是$
,它应该保留为交互模式。这篇文章有更多关于它的详细信息。谢谢你,伙计!这真是太好了!对于在同一个目录中处理数百个这样的文件这个无礼的问题,我只是简单地在文件夹?@ML33M查看编辑,也许它会给出一个如何完成的想法。谢谢,这很好。很抱歉,与OP相比,这可能没有那么有创意。我对编程太陌生了。我正在向你们学习,如果我可以问一个假问题,你能解释一下(独特的(DF[[“Pid\u treatmentsum”]]))部分?更具体地说,DF[[]]对字符串PiD\u treatmentsum做了什么?我想从已经分割的数据帧中获取所有“PiD\u treatmentsum”的向量/矩阵,并且unique将返回一个向量,因为它们在任何给定的分割数据帧中都具有相同的“PiD\u treatmentsum”。我希望我没有失去您:(我能在什么地方读到更多关于这个的信息吗?@ML33M我用[[
因为它在一个函数中,在编程时,这是推荐的提取器,而不是$
,它应该保留为交互模式。这篇文章有更多关于它的详细信息。谢谢你,伙计!这真是太好了!对于在同一个目录中处理数百个这样的文件这个无礼的问题,我只是简单地在文件夹?@ML33M查看编辑,也许它会给出如何完成的想法。
df <- iris
names(df)[5] <- "Pid_treatmentsum"
sptdf <- split(df, df$Pid_treatmentsum)
lapply(sptdf, function(DF){
outfile <- as.character(unique(DF[["Pid_treatmentsum"]]))
outfile <- paste0(outfile, ".txt")
write.table(DF,
file = outfile,
row.names = FALSE,
quote = FALSE)
})
splitFun <- function(file, col = "Pid_treatmentsum", ...){
X <- read.table(file, header = TRUE, ...)
sptdf <- split(X, X[[col]])
lapply(sptdf, function(DF){
outfile <- as.character(unique(DF[[col]]))
outfile <- paste0(outfile, ".txt")
write.table(DF,
file = outfile,
row.names = FALSE,
quote = FALSE)
})
}
filenames <- list.files(pattern = "<a regular expression>")
lapply(filenames, splitFun)