read.csv

R-匯入資料

Wush Wu

R-匯入資料(read.csv)

d <- read.csv("新北市統計資料_101年.csv")
print(xtable(head(d)), type = "html")
type name file_name
1 環境保護 垃圾清運處理概況(100年以前)-年 垃圾.xls
2 環境保護 垃圾清運處理概況(101年以後)-按處理方式分-年 垃圾.xls
3 環境保護 垃圾清運處理概況(101年以後)-按清運單位或回收管道分 垃圾.xls
4 環境保護 水肥清運處理概況-年 水肥.xls
5 環境保護 環境空氣品質-年 空品.xls
6 環境保護 公害陳情案件-年 公害.xls

CSV 檔案格式

"type","name","file_name"
"環境保護","垃圾清運處理概況(100年以前)-年","垃圾.xls"
"環境保護","垃圾清運處理概況(101年以後)-按處理方式分-年","垃圾.xls"
"環境保護","垃圾清運處理概況(101年以後)-按清運單位或回收管道分","垃圾.xls"

CSV 常見規範

編碼問題

編碼介紹

16進位:

0 1 2 3 4 5 6 7
0000 0001 0010 0011 0100 0101 0110 0111
8 9 A B C D E F
1000 1001 1010 1011 1100 1101 1110 1111

Hex Code

  • 位元組(byte)是目前電腦處理記憶體的基本單位。一個位元組有8個位元(bit)。ex:
    • 00000001
    • 00110101
  • 我們可以用兩個hex code來代表一個位元組。ex:
    • 00000001 ==> 0000,0001 ==> 01
    • 00110101 ==> 0011,0101 ==> 35

文字的"0"和數字的0,在電腦中是不同的!

  • 整數0L的記憶體,寫成hex code是 00 00 00 00 (佔有四個位元組)
  • 數值0.0的記憶體,寫成hex code是 00 00 00 00 00 00 00 00 (佔有八個位元組)
  • 文字"0"的記憶體,寫成hex code是 30 (佔有一個位元組)
as.raw(0)
## [1] 00
charToRaw("0")
## [1] 30
as.raw(0L)
## [1] 00

為什麼 00110000 代表文字"0"?

「編碼」就是將位元組合變成人類可讀文字的規則。

ASCII(American Standard Code for Information Interchange,美國訊息交換標準代碼)

  • 30 => "0"
  • 41 => "A"
  • 61 => "a"
  • 00 => 空字串(NULL)
  • 0D => Enter(\r)
  • 0A => 換行(\n)

小挑戰

  1. 請問"R\r\n"和"R\n"的位元組會是?
  2. 如何用R找出答案?(提示:charToRaw)
  3. 如果使用錯誤的編碼會發生什麼事情?

中文編碼

  • big5
  • utf-8
f <- file("臺北市警察局名稱及地址.csv", encoding = "big5")
d <- read.csv(f)
print(xtable(head(d)), type = "html")
name content traffic_information display_addr poi_addr
1 臺北市政府警察局總局 臺北市政府警察局總局 臺北市延平南路96號 台北市延平南路96號
2 大同分局 大同分局 臺北市錦西街200號 台北市錦西街200號
3 萬華分局 萬華分局 臺北市康定路22號 台北市康定路22號
4 中山分局 中山分局 臺北市中山北路二段1號 台北市中山北路二段1號
5 大安分局 大安分局 臺北市仁愛路三段2號 台北市仁愛路三段2號
6 中正第一分局 中正第一分局 臺北市公園路15號 台北市公園路15號