2014-05-08 68 views
0

以下R代碼生成一個列表,其中包含從單個目錄中讀取的50個csv文件的內容。每個csv文件都有不同數量的行。消除R列表中的特定行

fs <- list.files(my_dir, pattern=".csv$",full.names=TRUE) 
l <- lapply(fs, read.csv, stringsAsFactors=FALSE) 

當我查看列表時,我需要刪除一些行,以便將列表轉換爲單個數據框。有三種的「問題」行:

  1. 線路中的第一位置,其中I是整數1:50,對應於導入的CSV文件,501.csv,502.csv的序列開始[[I]],等等。
  2. 包含列名稱的行。我嘗試在我的list.files函數中使用row.names = FALSE,但它生成了以下錯誤:Error in list.files(my_dir, pattern = ".csv$", full.names = TRUE, row.names = FALSE)。我也嘗試在我的lapply函數中加入skip = 1。它刪除了列名,但創建了一個不同的問題:將X附加到包含與每個csv文件關聯的第一個觀察值的行中的第一個和最後一個字段的前面。
  3. 當在RStudio控制檯中查看時,至少出現肉眼看不到的線條。當我嘗試將列表轉換爲數據框時,我無法判斷這些明顯空行是否會導致問題。

下面是str(l)和dput(sapply(l,head,1))的輸出。我只用兩個部分文件在測試環境中運行這個程序。

> str(l) 
List of 2 
$ :'data.frame': 100 obs. of 4 variables: 
    ..$ Date: chr [1:100] "12/31/95" "1/1/96" "1/2/96" "1/3/96" ... 
    ..$ sub1: num [1:100] NA NA NA NA NA NA NA NA NA NA ... 
    ..$ sub2: num [1:100] NA NA NA NA NA NA NA NA NA NA ... 
    ..$ tech: int [1:100] 503 503 503 503 503 503 503 503 503 503 ... 
$ :'data.frame': 66 obs. of 4 variables: 
    ..$ Date: chr [1:66] "7/4/98" "7/5/98" "7/6/98" "7/7/98" ... 
    ..$ sub1: num [1:66] NA NA 1.62 NA NA 1.32 NA NA 1.9 NA ... 
    ..$ sub2: num [1:66] NA NA 1.39 NA NA 0.506 NA NA 1.06 NA ... 
    ..$ tech: int [1:66] 504 504 504 504 504 504 504 504 504 504 ... 

> dput(sapply(l, head, 1)) 
structure(list("12/31/95", NA_real_, NA_real_, 503L, "7/4/98", 
    NA_real_, NA_real_, 504L), .Dim = c(4L, 2L), .Dimnames = list(
    c("Date", "sub1", "sub2", "tech"), NULL)) 
+0

你可以添加'str(l)'和'dput(sapply(l,head,1)'的輸出嗎? –

+0

謝謝。 – user3614783

回答

0

R中沒有「右」或「左」名稱的理由。如果您不想使用標題,請在您的read.csv調用中使用參數headers=FALSE

您的其他問題也出現在第一次臉紅是由於不熟悉read.csv。我建議您閱讀一個帶有read.csv(file_name, header=FALSE)的文件,並嘗試使用其他參數,如fill,直到您確信自己正在讀取文件的所需內容爲止。