2014-01-17 106 views
4

我有一個數據框的列表。每個數據框都有相同的列名和不同數量的行。我想將我列表中的每個數據框導出到它自己的csv文件中。文件名應該是數據框的名稱。我已經瀏覽了幾個論壇帖子來嘗試不同的建議,但很多人都沒有工作或給我一個空白的csv文件。我查看的大多數帖子都是4歲左右,因此可能是其中的一部分。將列表中的每個數據幀導出到csv

這是我目前擁有的代碼:

#Export each data frame within a list 
    export = function(data){ 
    filename = function(x) paste(names(data[[x]]), ".csv"); 
    write.csv(data, filename,); 
    } 

    export(data) 

我得到的錯誤是

"Error in data.frame(list(Column1 = c(1L, 2L, 3L, 4L, : 
arguments imply differing number of rows: 62, 49, 41, 55, 39, 32, 34 

後來我想,那也許是因爲我需要在write.csv使用data[[x]]閱讀:

write.csv(data[[x]], filename,) 

但是,這給了我錯誤"Error in is.data.frame(x): object 'x' not found"

這裏是我的數據框列表的結構。

str(data) 
    List of 10 
    $ :'data.frame': 62 obs. of 6 variables: 
     ..$ TQ: Factor w/ 396 levels "V0Q1",..: 167 168 97 192 2 98 193 194 99 3 ... 
     ..$ CO    : int [1:62] 1 1 1 1 1 1 1 1 1 1 ... 
     ..$ PhP   : int [1:62] 166576 565275 1091111 1181342 1735982 2237418 2354002 3869267 6155933 7027686 ... 
     ..$ Position : num [1:62] 0 0.456 2.419 2.63 3.792 ... 
     ..$ D  : Factor w/ 2 levels "D2012",..: 1 1 1 2 1 1 2 2 1 1 ... 
     ..$ bin_index   : int [1:62] 1 1 1 1 1 2 2 2 3 3 ... 
    $ :'data.frame': 49 obs. of 6 variables: 
     ..$ TQ: Factor w/ 396 levels "V03Q1",..: 227 169 228 229 230 231 232 233 234 235 ... 
     ..$ CO    : int [1:49] 2 2 2 2 2 2 2 2 2 2 ... 
     ..$ PhP   : int [1:49] 805189 2219895 3386011 3999185 4430767 4644792 5223962 5392366 6052813 6136478 ... 
     ..$ Position : num [1:49] 0.16 5.95 9.87 12.69 15.22 ... 
     ..$ D  : Factor w/ 2 levels "D2012",..: 2 1 2 2 2 2 2 2 2 2 ... 
     ..$ bin_index   : int [1:49] 1 2 2 3 4 4 4 4 5 5 ... 
    $ :'data.frame': 41 obs. of 6 variables: 
     ..$ TQ: Factor w/ 396 levels "V03Q",..: 28 257 258 105 144 29 106 30 145 259 ... 
     ..$ CO    : int [1:41] 3 3 3 3 3 3 3 3 3 3 ... 
     ..$ PhP   : int [1:41] 1055462 2022884 2222474 2269935 3497149 3755007 5079223 6855634 7091838 10284891 ... 
     ..$ Position : num [1:41] 1.3 4.94 7.52 8.34 11.28 ... 
     ..$ D  : Factor w/ 2 levels "D2012",..: 1 2 2 1 1 1 1 1 1 2 ... 
     ..$ bin_index   : int [1:41] 1 1 2 2 3 3 4 5 6 8 ... 

有什麼建議嗎?謝謝。

+1

爲什麼要投票? –

回答

6

發生該錯誤是因爲您嘗試將列表傳遞給write.csv,但它需要data.frame。它有用地試圖將列表強制轉換爲data.frame,但不是成功的並告訴你。你需要遍歷列表。有不同的循環可能性,但我更喜歡舊的for循環這樣的事情。

試試這個(未測試):

for (i in seq_along(data)) { 
    filename = paste(names(data)[i], ".csv") 
    write.csv(data[[i]], filename) 
} 

當然,你可以在一個功能這個包起來。

編輯:

顯然你列出的元素沒有被命名。試試這個:

for (i in seq_along(data)) { 
    filename = paste(i, ".csv") 
    write.csv(data[[i]], filename) 
} 
+0

嗨,謝謝你的建議。我試過這個,並得到一個名爲「.csv」。它不包含任何數據。 – SC2

+0

請向我們展示'str(data)'。 – Roland

+0

在 – SC2