2013-08-19 54 views
0

我正嘗試使用for循環讀取多個數據框,並試圖在數據框中分配變量名稱。我想給所有的數據框提供相同的列名。將多個csv文件讀取爲新的數據框並重命名列

for循環我用如下:

for (i in 1:15){ 
    assign(paste0("watersurf",i),read.table(paste0("D:/water-surf/","water-surf-",i,".dat"),header=F,skip=1,sep="")) 
} 

通過使用上述代碼我能夠創建15個數據幀。我如何將名稱分配給所有數據框?我用下面的代碼:

for (i in 1:15){ 
    assign(paste0("watersurf",i),read.table(paste0("D:/water-surf/","water-surf-",i,".dat"),header=F,skip=1,sep="")) 
    names(paste0("watersurf",i))<- c("X","Y","Z") 
} 

我得到的錯誤如下:

Error in names(paste("watersurf", i)) <- c("X", "Y", "Z") : 
    target of assignment expands to non-language object 

任何人都可以建議我怎麼能擺脫上述錯誤或重命名中的所有列的任何有效方式數據幀一次。當然,我可以嘗試單獨指定名稱,但我正在尋找一個簡單而優雅的解決方案。

我工作的一個CSV文件的樣本數據如下:

* , Water Levels, Depth Averaged 
    407902.775 3437067.475  0.331 
    406719.675 3436930.750  0.327 
    405754.025 3436197.650  0.325 
    404614.375 3435972.650  0.322 
    404273.050 3434775.450  0.321 
    403347.425 3433981.900  0.320 
    404118.025 3433179.975  0.318 
    404798.100 3432441.075  0.317 
    403701.000 3432521.400  0.317 
    402682.750 3432727.350  0.316 
    402835.400 3431561.150  0.315 
    403957.775 3431203.900  0.313 
    405159.775 3431120.150  0.309 
    405918.250 3430149.075  0.307 
    405902.700 3428908.500  0.306 
    405051.075 3428616.450  0.306 
    404963.950 3427407.225  0.304 
    405570.675 3426347.950  0.304 
    406407.800 3425479.275  0.304 
    406799.425 3424354.200  0.303 
    407590.800 3423501.200  0.302 
    408119.375 3422490.975  0.301 
    408033.050 3421648.575  0.300 
    407924.425 3420566.700  0.300 
+0

它不工作,因爲'paste0(「watersurf」,我)'返回一個字符串。 –

+0

@SeñorO:謝謝你澄清這一點。有沒有其他方法可以更改這些姓氏? –

+0

我不知道任何,但可能會有一些。也許你最好的選擇就是在第一個循環中這樣做,你(1)將數據讀入臨時文件。對象,(2)更改名稱,(3)分配對象名稱。 –

回答

2

直到有人想出了一個更好的解決方案,在第一循環更改爲:

for (i in 1:15){ 
    Data <- read.table(paste0("D:/water-surf/","water-surf-",i,".dat"),header=F,skip=1)) 
    names(Data) <- c("X", "Y", "Z") 
    assign(paste0("watersurf", i), Data) 
} 
+0

+1非常感謝。按預期工作。 –

0

如果我理解你的問題,你試圖將多個文本文件合併成一個數據框,然後重命名這些列。爲此,您可以輕鬆地使用plyr

require(plyr) 
# set working directory 
setwd("D:/water-surf/") 

# check that works for 1 file 
table_1 <- read.table("./water-surf-1.dat", header= F, skip= 1, sep= "") 

# import all files 
files <- dir("D:/water-surf/") # declare the file directory 
table_all <- ldply(files, read.table, stringsAsFactors= TRUE, header= F, 
    skip= 1, sep= "") 

# rename the columns 
names(table_all) <- c("var_1", "var_2", "var_3") 
相關問題