2016-12-12 19 views
0

我試圖在R中保存50個.csv文件。從那裏,我想運行一些代碼來選擇列中的特定單詞,我知道我可以單獨執行此操作,但顯然需要很長時間。有沒有更快的方法來做到這一點? 這是我必須做的50倍我可以在R中使用for循環在R中寫入大量的.csv文件嗎?

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文件下DF100,df110,df120等保存中的R ...

我得到以下錯誤:

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

這是有道理的,因爲我沒有一個名爲hello [number] _mynameis.csv的文件,但我不知道該怎麼辦。感謝您的任何幫助!

回答

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) 
} 
+0

謝謝!然後我得到一個錯誤,說錯誤在[[ - 。data.frame]([* tmp *',i,value = list(V1 = c(3L,1L,1L,: )現有的列' 我假設這是爲了處理數據本身,在這種情況下,你將無法提供幫助嗎? –

+0

'class(df)'向你展示了什麼? –

+0

它向我展示它是一個函數 –

2

這是更好的list閱讀它,而不是在全球ENV創建多個對象,即

files <- sprintf("hello%d_mynameis.csv", number) 
library(data.table) 
lapply(files, function(x) fread(x)[, sum(A5 %chin% c("My", "Name"))]) 
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))) 
} 
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) 
} 
+1

這不會創建文件列表,它會創建一個文件向量。 –