我试图在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的文件,但我不知道还能做什么。谢谢你的帮助!
答案 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)
}