R 基于列拆分数据帧,并写出具有特定名称的多个Split.txt文件

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

我正在处理由微观数据生成的巨大.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_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)