R CSV 文件

R 作為統(tǒng)計學專業(yè)工具,如果只能人工的導入和導出數(shù)據(jù)將使其功能變得沒有意義,所以 R 支持批量的從主流的表格存儲格式文件(例如 CSV、Excel、XML 等)中獲取數(shù)據(jù)。

CSV 表格交互

CSV(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號) 是一種非常流行的表格存儲文件格式,這種格式適合儲存中型或小型數(shù)據(jù)規(guī)模的數(shù)據(jù)。

由于大多數(shù)軟件支持這個文件格式,所以常用于數(shù)據(jù)的儲存與交互。

CSV 本質是文本,它的文件格式極度簡單:數(shù)據(jù)一行一行的用文本保存起來而已,每條記錄被分隔符分隔為字段,每條記錄都有同樣的字段序列。

以下是一個簡單的 sites.csv 文件(存儲在測試程序的相同目錄下):

id,name,url,likes
1,Google,www.google.com,111
2,Nhooo,www.soo66.com,222
3,Taobao,www.taobao.com,333

CSV 用逗號來分割列,如果數(shù)據(jù)中含有逗號,就要用雙引號將整個數(shù)據(jù)塊包括起來。

注意:包含非英文字符的文本要注意保存的編碼,由于很多計算機普遍使用 UTF-8 編碼,所以我是用 UTF-8 進行保存的。

注意: CSV 文件最后一行需要保留一個空行,不然執(zhí)行程序會有警告信息。

Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'sites.csv'

讀取 CSV 文件

接下來我們就可以使用 read.csv() 函數(shù)來讀取 CSV 文件的數(shù)據(jù):

data <- read.csv("sites.csv", encoding="UTF-8")
print(data)

如果不設置 encoding 屬性,read.csv 函數(shù)將默認以操作系統(tǒng)默認的文字編碼進行讀取,如果你使用的是 Windows 中文版系統(tǒng)且沒有設置過系統(tǒng)的默認編碼,那系統(tǒng)的默認編碼應該是 GBK。所以大家請盡可能地統(tǒng)一文字編碼以防出錯。

執(zhí)行以上代碼輸出結果為:

  id   name            url likes
1  1 Google www.google.com   111
2  2 Nhooo www.soo66.com   222
3  3 Taobao www.taobao.com   333

read.csv() 函數(shù)返回的是數(shù)據(jù)框,我們可以很方便的對數(shù)據(jù)進行統(tǒng)計處理,以下示例我們查看行數(shù)和列數(shù):

data <- read.csv("sites.csv", encoding="UTF-8")

print(is.data.frame(data))  # 查看是否是數(shù)據(jù)框
print(ncol(data))  # 列數(shù)
print(nrow(data))  # 行數(shù)

執(zhí)行以上代碼輸出結果為:

[1] TRUE
[1] 4
[1] 3

以下統(tǒng)計數(shù)據(jù)框中 likes 字段最大對數(shù)據(jù):

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 最大的數(shù)據(jù)
like <- max(data$likes)
print(like)

執(zhí)行以上代碼輸出結果為:

[1] 333

我們也可以指定查找條件,類似 SQL where 子句一樣查詢數(shù)據(jù),需要用到到函數(shù)是 subset()。

以下示例查找 likes 為 222 到數(shù)據(jù):

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 為 222 的數(shù)據(jù)
retval <- subset(data, likes == 222)
print(retval)

執(zhí)行以上代碼輸出結果為:

  id   name            url likes
2  2 Nhooo www.soo66.com   222

注意:條件語句等于使用 ==。

多個條件使用 & 分隔符,以下示例查找 likes 大于 1 name 為 Nhooo 的數(shù)據(jù):

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 大于 1 name 為 Nhooo 的數(shù)據(jù)
retval <- subset(data, likes > 1 & name=="Nhooo")
print(retval)

執(zhí)行以上代碼輸出結果為:

  id   name            url likes
2  2 Nhooo www.soo66.com   222

保存為 CSV 文件

R 語言可以使用 write.csv()  函數(shù)將數(shù)據(jù)保存為 CSV 文件。

接著以上示例,我們將 likes 為 222 的數(shù)據(jù) 保存到 nhooo.csv 文件:

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 為 222 的數(shù)據(jù)
retval <- subset(data, likes == 222)

# 寫入新的文件
write.csv(retval,"nhooo.csv")
newdata <- read.csv("nhooo.csv")
print(newdata)

執(zhí)行以上代碼輸出結果為:

 X id   name            url likes
1 2  2 Nhooo www.soo66.com   222

X 來自數(shù)據(jù)集 newper,可以通過參數(shù) row.names = FALSE 來刪除它:

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 為 222 的數(shù)據(jù)
retval <- subset(data, likes == 222)

# 寫入新的文件
write.csv(retval,"nhooo.csv", row.names = FALSE)
newdata <- read.csv("nhooo.csv")
print(newdata)

執(zhí)行以上代碼輸出結果為:

  id   name            url likes
1  2 Nhooo www.soo66.com   222

執(zhí)行完后,我們就可以看到 nhooo.csv 文件生成成功了。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清