1. 程式人生 > >R語言讀CSV、txt檔案方式以及read.table read.csv 和readr(大資料讀取包)

R語言讀CSV、txt檔案方式以及read.table read.csv 和readr(大資料讀取包)

首先準備測試資料*(mtcars)分別為CSV.    TXT

歡迎加入Python快速進階QQ群:867300100

R語言資料分析案例:直通車

read.table 預設形式讀取CSV(×)與TXT(效果理想)

①
> test<-read.table("C:/Users/admin/Desktop/test.txt",header = F)
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 1 did not have 12 elements
> test<-read.table("C:/Users/admin/Desktop/test.txt")
> str(test)
'data.frame':	32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : int  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : int  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: int  4 4 1 1 2 1 4 2 2 4 ...
> attributes(test)
$names
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

$class
[1] "data.frame"

$row.names
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"          "Hornet 4 Drive"     
 [5] "Hornet Sportabout"   "Valiant"             "Duster 360"          "Merc 240D"          
 [9] "Merc 230"            "Merc 280"            "Merc 280C"           "Merc 450SE"         
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood"  "Lincoln Continental"
[17] "Chrysler Imperial"   "Fiat 128"            "Honda Civic"         "Toyota Corolla"     
[21] "Toyota Corona"       "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"       "Lotus Europa"       
[29] "Ford Pantera L"      "Ferrari Dino"        "Maserati Bora"       "Volvo 142E"  
②效果不理想,沒有data.frame
> test<-read.table("C:/Users/admin/Desktop/test.csv")
#變數型別識別遺漏
> str(test)
'data.frame':	33 obs. of  2 variables:
 $ V1: Factor w/ 33 levels "","AMC Javelin",..: 1 19 20 6 14 15 32 8 22 21 ...
 $ V2: Factor w/ 33 levels ",\"mpg\",\"cyl\",\"disp\",\"hp\",\"drat\",\"wt\",\"qsec\",\"vs\",\"am\",\"gear\",\"carb\"",..: 1 20 21 25 23 16 15 5 27 26 ...
> attributes(test)
$names
[1] "V1" "V2"

$class
[1] "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
> test<-read.table("C:/Users/admin/Desktop/test.csv") #變數型別識別遺漏 > str(test) 'data.frame': 33 obs. of 2 variables: $ V1: Factor w/ 33 levels "","AMC Javelin",..: 1 19 20 6 14 15 32 8 22 21 ... $ V2: Factor w/ 33 levels ",\"mpg\",\"cyl\",\"disp\",\"hp\",\"drat\",\"wt\",\"qsec\",\"vs\",\"am\",\"gear\",\"carb\"",..: 1 20 21 25 23 16 15 5 27 26 ... > attributes(test) $names [1] "V1" "V2" $class [1] "data.frame" $row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

修改後:還可以具體根據自己需要

> test<-read.table("C:/Users/admin/Desktop/test.csv",header = T,sep=",")
> str(test)
'data.frame':	32 obs. of  12 variables:
 $ X   : Factor w/ 32 levels "AMC Javelin",..: 18 19 5 13 14 31 7 21 20 22 ...
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : int  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : int  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: int  4 4 1 1 2 1 4 2 2 4 ...
> attributes(test)
$names
 [1] "X"    "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

$class
[1] "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

④效果同③  read.table 是讀取矩形格子狀資料最為便利的方式

> test<-read.csv("C:/Users/admin/Desktop/test.csv",head=T,sep=",")
> str(test)
'data.frame':	32 obs. of  12 variables:
 $ X   : Factor w/ 32 levels "AMC Javelin",..: 18 19 5 13 14 31 7 21 20 22 ...
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : int  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : int  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: int  4 4 1 1 2 1 4 2 2 4 ...
> attributes(test)
$names
 [1] "X"    "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

$class
[1] "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

⑤:read.csv讀txt。丟失資料結構,1 variable

> test<-read.csv("C:/Users/admin/Desktop/test.txt",head=T,sep=",")
> str(test)
'data.frame':	32 obs. of  1 variable:
 $ mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb: Factor w/ 32 levels "AMC Javelin 15.2 8 304 150 3.15 3.435 17.3 0 0 3 2",..: 18 19 5 13 14 31 7 21 20 22 ...
> attributes(text)
NULL
> attributes(test)
$names
[1] "mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb"

$class
[1] "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

⑥使用readr包中read_csv讀取情況,其適合

> test<-read_csv("C:/Users/admin/Desktop/test.csv")
Parsed with column specification:
cols(
  X1 = col_character(),
  mpg = col_double(),
  cyl = col_integer(),
  disp = col_double(),
  hp = col_integer(),
  drat = col_double(),
  wt = col_double(),
  qsec = col_double(),
  vs = col_integer(),
  am = col_integer(),
  gear = col_integer(),
  carb = col_integer()
)
Warning message:
Missing column names filled in: 'X1' [1] 
> test
# A tibble: 32 × 12
                  X1   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
               <chr> <dbl> <int> <dbl> <int> <dbl> <dbl> <dbl> <int> <int> <int> <int>
1          Mazda RX4  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4
2      Mazda RX4 Wag  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4
3         Datsun 710  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
4     Hornet 4 Drive  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1
5  Hornet Sportabout  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2
6            Valiant  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1
7         Duster 360  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4
8          Merc 240D  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
9           Merc 230  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
10          Merc 280  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4
# ... with 22 more rows
> str(test)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	32 obs. of  12 variables:
 $ X1  : chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : int  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : int  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: int  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, "spec")=List of 2
  ..$ cols   :List of 12
  .. ..$ X1  : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
c"
> attributes(test)
$class
[1] "tbl_df"     "tbl"        "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

$names
 [1] "X1"   "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

$spec
cols(
  X1 = col_character(),
  mpg = col_double(),
  cyl = col_integer(),
  disp = col_double(),
  hp = col_integer(),
  drat = col_double(),
  wt = col_double(),
  qsec = col_double(),
  vs = col_integer(),
  am = col_integer(),
  gear = col_integer(),
  carb = col_integer()
)

⑦read_csv對於test.txt ×

> test<-read_csv("C:/Users/admin/Desktop/test.txt")
Parsed with column specification:
cols(
  `mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb` = col_character()
)
Warning: 64 parsing failures.
row                                                              col           expected actual
  1 mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb delimiter or quote       
  1 mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb delimiter or quote      M
  1 mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb delimiter or quote       
  1 mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb delimiter or quote      D
  1 mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb delimiter or quote       
... ................................................................ .................. ......
See problems(...) for more details.

> test
# A tibble: 1 × 1
                                                             `mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb`
                                                                                                                          <chr>
1 Mazda RX4" 21 6 160 110 3.9 2.62 16.46 0 1 4 4\r\n"Mazda RX4 Wag" 21 6 160 110 3.9 2.875 17.02 0 1 4 4\r\n"Datsun 710" 22.8 4
> str(test)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	1 obs. of  1 variable:
 $ mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb: chr "Mazda RX4\" 21 6 160 110 3.9 2.62 16.46 0 1 4 4\r\n\"Mazda RX4 Wag\" 21 6 160 110 3.9 2.875 17.02 0 1 4 4\r\n\"Datsun 710\" 22."| __truncated__
 - attr(*, "problems")=Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	64 obs. of  4 variables:
  ..$ row     : int  1 1 1 1 1 1 1 1 1 1 ...
  ..$ col     : chr  "mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" \"carb" "mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" \"carb" "mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" \"carb" "mpg\" \"cyl\" \"disp\" \"hp\" \"drat\" \"wt\" \"qsec\" \"vs\" \"am\" \"gear\" \"carb" ...
  ..$ expected: chr  "delimiter or quote" "delimiter or quote" "delimiter or quote" "delimiter or quote" ...
  ..$ actual  : chr  " " "M" " " "D" ...
 - attr(*, "spec")=List of 2
  ..$ cols   :List of 1
  .. ..$ mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb: list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  ..$ default: list()
  .. ..- attr(*, "class")= chr  "collector_guess" "collector"
  ..- attr(*, "class")= chr "col_spec"


其他複雜引數解讀:


"相關更多引數

read.table(file, header = FALSE, sep = "", quote = "\"'",
           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
           row.names, col.names, as.is = !stringsAsFactors,
           na.strings = "NA", colClasses = NA, nrows = -1,
           skip = 0, check.names = TRUE, fill = !blank.lines.skip,
           strip.white = FALSE, blank.lines.skip = TRUE,
           comment.char = "#",
           allowEscapes = FALSE, flush = FALSE,
           stringsAsFactors = default.stringsAsFactors(),
           fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)


常用引數解讀:

file表示要讀取的檔案。file可以是

①絕對路徑或者相對路徑,但是一定要注意,因為在R語言中\是轉義符,所以路徑分隔符必須寫成\\,比如“C:\\myfile\\myfile.txt”或者
Sys.setenv(JAVA_HOME='C://Program Files/Java/jdk1.6.0_21/jre')
②可以使剪下板的內容。
③使用file.choose(),彈出對話方塊,讓你選擇檔案位置。

header來確定資料檔案中第一行是不是標題。預設F,即認為資料檔案沒有標題

引數----------Arguments----------
引數:sep
欄位分隔符。檔案的每一行的值是通過這個角色分離。如果sep = ""(預設read.table)分隔符是“白色空間”,這是一個或多個空格,製表符,換行符或回車。
引數:quote

引用字符集。完全禁用引用,使用quote = ""。看到scan引號中嵌入引號的行為。只考慮讀的性格,這是所有這些,除非colClasses指定的列引用。

引數:dec

字元用於在小數點檔案。
引數:row.names

向量的行名。這可以是一個向量,給予實際的行名,或一個號碼錶,其中包含的行名,或字串,包含行名稱表列的名稱列。如果有一個頭的第一行包含列數少一個領域,在輸入的第一列用於行名稱。否則,如果row.names丟失,行編號。使用row.names = NULL部隊排編號。失蹤或NULLrow.names,生成的行被認為是“自動”(而不是由as.matrix儲存)的名稱。
引數:col.names

可選名稱為變數的向量。預設是使用列數"V"其次。
引數:as.is

read.table的預設行為轉換成字元變數(而不是轉換為邏輯,數字或複雜的)因素。變數as.is控制轉換colClasses沒有其他指定的列。它的值是一個邏輯值向量(如果有必要回收價值),或數字或字元索引指定的列不應該被轉換為因素的向量。注:禁止所有的轉換,包括那些數字列,設定colClasses = "character"。請注意,as.is指定每列(而不是每個變數)等行名稱的列(如有)及任何要跳過的列。

引數:na.strings

NA值作為解釋的字串的字元向量。空白領域也被認為是缺少邏輯,整數,數字和複雜的領域中的價值。
引數:colClasses

字元。須承擔一個班的向量為列。必要時,回收或如果被命名為特徵向量,未指定的值是NA。可能的值是NA(預設情況下,當type.convert)"NULL"(列時跳過),一個原子的向量類(邏輯,整數,數字,複雜的,性格,原材料),或"factor","Date"或"POSIXct"。否則需要有一個as從methods轉換到指定的正規類的方法(包"character")。請注意,colClasses指定每列(而不是每個變數)等行名稱(如有)列。
引數:nrows

整數:最大數量的行讀入負和其他無效值將被忽略。
引數:skip

整數:開始讀取資料前跳過的資料檔案的行數。
引數:check.names
l
邏輯。如果TRUE然後檢查資料框中的變數的名稱,以確保它們是語法上有效的變數名。如果有必要,他們調整(make.names),使他們,同時也確保沒有重複。
引數:fill

邏輯。如果TRUE然後在情況下,行有長度不等的空白領域隱式新增。見“詳細資料”。
引數:strip.white

邏輯。只用當sep已指定,並允許剝離的非上市character(numeric領域總是剝離領域)的開頭和結尾的空白。看到scan進一步詳情(包括“白色空間”的確切含義),記住,列可能包含的行名。
引數:blank.lines.skip

邏輯:如果TRUE在輸入空行被忽略。
引數:comment.char

性格:特徵向量的長度包含單個字元或一個空字串之一。使用""完全關閉評論的解釋。
引數:allowEscapes

邏輯。如\n處理或逐字讀(預設)C風格逃逸?請注意,如果不是引號內的這些都可以解釋為分隔符(而不是作為一個註釋字元)。詳細內容見scan。
引數:flush

邏輯:如果TRUE,scan將重新整理行結束後閱讀領域的最後要求。這允許把意見後,最後一個欄位。
引數:stringsAsFactors

邏輯:特徵向量轉換的因素?請注意,這是由as.is和colClasses,這兩者可以更好地控制覆蓋。
引數:fileEncoding
字串:如果非空的宣告檔案(未連線)上使用這樣的字元資料可以被重新編碼的編碼。看到“編碼”部分,幫助file“R資料匯入/匯出手冊”和“注意”。
引數:encoding

假設輸入字串編碼。它是用來作為已知的Latin-1或UTF-8(見標記字串Encoding):不使用它來重新編碼輸入,但允許R在他們的本地編碼處理編碼的字串(如果這兩個標準之一)。看到“價值”。引數:text引數:text
字串:file如果不提供的,這是,那麼資料是從text值讀通過的文字連線。請注意,一個文字字串,可用於包括(小)R程式碼集內的資料。


和read.table有所不同的,是read.csv的預設引數有別。注意看,header和sep的預設值。

read.csv(file, header = TRUE, sep = ",", quote = "\"",
         dec = ".", fill = TRUE, comment.char = "", ...