我可以在R中使用for循环来写入R中的大量.csv文件吗?

时间:2016-12-12 02:06:15

标签: r csv dataframe

我试图在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)
} 

我并不认为这段代码会起作用,而且正如预期的那样,它并没有。基本上,我希望在df100,df110,df120等下将50个csv文件保存在R中......

我收到以下错误:

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用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)
} 

答案 2 :(得分:1)

您可以使用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)))
}

答案 3 :(得分:0)

制作数据框列表。

data <- c()
filenum <- c(1, 2)

for (i in number) {
    file <- paste0("hello", filenum, "_mynameis.csv")
    fileread <- read.csv(file, header=FALSE)
    file <- c(file,fileread)
}