【问题标题】:split dataframe columns to multiple text files with names of columnheaders将数据框列拆分为具有列标题名称的多个文本文件
【发布时间】:2026-02-26 20:20:07
【问题描述】:

我有一个数据框 df,大​​约有 50 列和 20.000 行。它看起来像下面的数据框:

Date                  P1               P2            P3            P4
1/1/2000               0               0.4           0             0
2/1/2000               0               0.1           0             0.1
3/1/2000               0.5             0             0             1
4/2000                 0.8             1.5           1             1

如何将每个(数字)列导出到文本文件?

(除了 Date 列,我可以从 df 中删除/子集/删除)

我希望文本文件与列标题同名。

P1.txt

0             
0              
0.5            
0.8            

P2.txt

0.4             
0.1              
0            
1.5            

等等

这是我目前所拥有的,共 50 列:

     df$Date<-NULL
     for(i in c(1:32)){
     write.table(df[,i],file=paste0(names(df)[i],row.names = FALSE, col.names = FALSE, ".txt")) 

}

但是生成的输出是:P1.txt

"P1"
"1"  0             
"2"  0              
"3"  0.5            
"4"  0.8  

是否可以去掉第一列“1”、“2”、“3”、“4”和标题“P1”?

【问题讨论】:

  • 请创建一个reproducible exampledput() 应该对此有所帮助
  • 您只需要找到数字列,然后在它们上循环write.table。我会使用Map() 使名称与数据更容易匹配。如果您想发布您的尝试,我们可以帮助您修复它。但不表现出任何努力是获得反对票的好方法。
  • 这不是子集和导出数据的基本问题吗?我认为两者都已经在 SO 上得到了回答。
  • @PereG 它不是您的链接的副本。

标签: r dataframe split export text-files


【解决方案1】:
# dummy data
mydf <- as.data.frame(matrix(c(rnorm(20), rnorm(20), rnorm(20), rnorm(20), rnorm(20)), nrow=20))
        V1          V2          V3          V4          V5

1  -0.62829066  1.15406529 -0.18567863  1.59192254  0.95744852
2   0.47275575  1.57982778 -0.78190000  0.56729278 -0.99929298
...
20  0.30557789  0.55654245  0.43422811  0.22404488 -0.39800789

write.csv(mydf[, 1], file = paste0(names(mydf)[1], ".csv")) 

这会在 R 的工作目录中创建 V1.csv。

(l) 应用它会创建 V1.csv、V2.csv、...、V5.csv:

lapply(1:5, function(x) write.csv(mydf[, x], file = paste0(names(mydf)[x], ".csv", row.names = FALSE, col.names = FALSE, quote = FALSE)))

现在,在 R 的工作目录中创建了 V1.csv、V2.csv、...、V5.csv,您可以通过 getwd() 找到。

上面的单行将[[1]] NULL [[2]] NULL ...[[5]] NULL 打印到控制台,同时在 R 的工作目录中创建 V1.csv、V2.csv、...、V5.csv。

【讨论】:

  • 感谢您的帮助。但是此选项会在我的输出文件中生成列名,并且还会生成带有 id 号的附加第一列。是否可以在 R 中生成仅包含一列数据的 output.txt 文件,如示例中所示。所以我想要......让我们称之为“零列”,并且在我的 output.txt 文件中没有列标题
  • @T.BruceLee 是的,阅读?write.csv 的手册,您可以设置row.names = FALSE, col.names = FALSE, quote = FALSE
  • @zx8754 我尝试添加 row.names = FALSEcol.names = FALSE 语句。它似乎所做的只是在我每次使用它时在文本文件的名称后面添加 FALSE。因此,名称不是 P1,而是 P1FALSEFALSE,它并没有改变 output.txt 的内容。但我可能没有正确使用它?抱歉,我是 R 新手,我大概了解它的基本内容。
  • row.namescol.nameswrite.table 的参数,而不是 file 参数。
  • @T.BruceLee 试试lapply(which(sapply(df, is.numeric)), function(x) write.table(df[x], file = paste0(names(df[x]), ".txt"), row.names = F, col.names=F) ) 这仅适用于数字列
【解决方案2】:

这是我用作解决方案的方法:

### remove date column
df7$Date<-NULL

### loop writing text files, for 50 columns, without column and row names, and use the columnnames as text file names.  
for(i in c(1:50)){
write.table(df7[,i],row.names = FALSE, col.names = FALSE,file=paste0(names(df7)[i],".txt"))
}

【讨论】:

    最近更新 更多