【问题标题】:Can I use a for loop in R to write in a high number of .csv files in R?我可以在 R 中使用 for 循环在 R 中写入大量 .csv 文件吗?
【发布时间】:2016-12-12 02:06:14
【问题描述】:

我正在尝试在 R 中保存 50 个 .csv 文件。从那里,我想运行一些代码来选择列中的特定单词,我知道我可以单独执行此操作,但显然需要很长时间.有没有更快的方法来做到这一点? 这是我必须做 50 次的事情

d100 <- read.csv("hello100_mynameis", header = FALSE)
S100 = sum(df100$A5 =='My') + sum(df100$A5 == 'Name') 
S100

df110 <- read.csv("hello110_mynameis", header = FALSE)
S110 = sum(df110$A5 =='My') + sum(df110$A5 == 'Name') 
S110

df120 <- read.csv("hello120_mynameis", header = FALSE)
S120 = sum(df120$A5 =='My') + sum(df120$A5 == 'Name') 
S120

我的理解是 for 循环最适合这个:

number = c(100, 110, 120)

for(i in number){
df[i] <- read.csv("hello[number]_mynameis.csv", header = FALSE)
} 

我真的不认为这段代码会起作用,正如预期的那样,它不会。所以本质上,我希望将 50 个 csv 文件保存在 R 中的 df100、df110、df120 等...

我收到以下错误:

In file(file, "rt") :
cannot open file 'hello[number]_mynameis.csv': No such file or directory

这是有道理的,因为我没有名为 hello[number]_mynameis.csv 的文件,但我不知道还能做什么。感谢您的帮助!

【问题讨论】:

    标签: r csv dataframe


    【解决方案1】:

    最好在list 中阅读它,而不是在全局环境中创建多个对象,即

    files <- sprintf("hello%d_mynameis.csv", number)
    library(data.table)
    lapply(files, function(x) fread(x)[, sum(A5 %chin% c("My", "Name"))]) 
    

    【讨论】:

      【解决方案2】:

      使用paste 函数:

      number <- c(100, 110, 120)
      df <- list()
      
      for (i in number) {
          file <- paste0("hello", i, "_mynameis.csv")
          df[[i]] <- read.csv(file, header=FALSE)
      } 
      

      【讨论】:

      • 谢谢!然后我收到一个错误,上面写着Error in [(*tmp*, i, value = list(V1 = c(3L, 1L, 1L, : new columns would leave holes after existing columns 我假设这与数据本身有关,在这种情况下你将无法帮忙?
      • 尝试将df初始化为一个列表。
      【解决方案3】:

      您可以使用assign 在环境中创建对象

      for(i in number){
          assign(paste0("new_df_",i), read.csv(paste0("hello[",i,"]mynameis.csv"), header = FALSE))
      }
      

      这是一个工作示例

      df1 <- data.frame(id = 1:5)
      df2 <- data.frame(id = 6:10)
      
      number <- 1:2
      
      for(i in number){
          assign(paste0("new_df_",i), get(paste0("df", i)))
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-02
        • 2018-03-14
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 2015-11-10
        相关资源
        最近更新 更多