首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动捕获文件名并将它们用于R中的输出文件

自动捕获文件名并将它们用于R中的输出文件
EN

Stack Overflow用户
提问于 2015-05-15 19:46:39
回答 1查看 2.9K关注 0票数 2

最近,我需要编写可复制的R代码,用于读取一批.csv文件,然后以相同的名称输出每个文件。例如,

代码语言:javascript
复制
    filenames <- list.files(path="G:\\test")
    filenames
    [1] "mydata1.csv" "mydata2.csv" "mydata3.csv"........."mydata100.csv"
length(filenames)
100

对于这100个文件,我需要读取文件,重新格式化,然后使用sink()输出同名的.txt文件。(感谢弗兰克帮了我很多代码!)例如,我在文件夹"G:\test“下读取第一个.csv文件mydata1,并希望使用折叠代码输出同名为mydata1的.txt文件。

代码语言:javascript
复制
 mydata1
     value group treatment
    1   39.7     A         1
    2   53.5     A         1
    3   51.1     A         1
    4   67.8     A         1
    5   84.8     B         1
    6   80.3     B         1
    7   79.6     B         1
    8   84.3     B         1
    9   31.0     C         2
    10  32.0     C         2
    11  33.0     C         2
    12  34.0     C         2
    13   1.0     D         2
    14   2.0     D         2
    15   3.0     D         2
    16   4.0     D         2
    printables <- lapply(
    split(mydata,mydata$treatment),
     function(t)
     split(t,as.character(t$group)))
    sink("G:\\test\\mydata1.txt")
    for (t in seq_along(printables)){
     for(g in seq_along(printables[[t]])){
     print(printables[[t]][[g]],row.names=FALSE)
     cat('\n')
    }
    cat('\n\n')
    }
    sink()

因此,对于同一文件夹下的100个.csv文件,如何编写可重复的代码来自动捕获每个文件名,然后将捕获的名称放入sink()中以输出同名的txt文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 09:18:25

这是相当简单的。正如Alex .提到的,您可以获得带有grep的文件名的前缀(在本例中为sub),并在新的文件名中使用该前缀。

我做了一个简单的例子。有两个csv文件,其结构如下。这些被读取,然后在一个循环打印为接收器输出。为了简单起见,我省略了您的代码,但假设这是可行的,那么替换它应该很简单。

file1.csv:

代码语言:javascript
复制
structure(list(file = c(1L, 1L), value = 1:2), .Names = c("file", 
"value"), class = "data.frame", row.names = c(NA, -2L))

file2.csv:

代码语言:javascript
复制
structure(list(file = c(2L, 2L), value = 3:4), .Names = c("file", 
"value"), class = "data.frame", row.names = c(NA, -2L))

R脚本:

代码语言:javascript
复制
setwd("path\\to\\files")
files <- list.files(pattern = "*.csv$")
files

for(i in 1:length(files)){
  test.data <- read.csv(file = files[i], header = TRUE, stringsAsFactors = FALSE)
  filenm <- sub("csv", "txt", files[i]) # get rid of csv suffix and replace with txt
  print(filenm) #check, to make sure the above is working
  sink(file = filenm, type = "output")
  # your code here
  print(head(test.data))
  sink()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30267620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档