1. 程式人生 > >R語言--資料介面(五)

R語言--資料介面(五)

1. CSV檔案
  • 獲取和設定工作目錄
# 獲取和設定工作目錄
print(getwd())
# 設定當前工作目錄
setwd("E:/R")
print(getwd())

列印結果:


3110861-ba61746f49b87cf8.png 圖1.png
  • 輸入為CSV檔案
    csv檔案是一個文字檔案,其中列中的值由逗號分隔。
id,name,salary,start_date,dept
1,Rick,623.3,2012-01-01,IT
2,Dan,515.2,2013-09-23,Operations
3,Michelle,611,2014-11-15,IT
4,Ryan,729,2014-05-11,HR
 ,Gary,843.25,2015-03-27,Finance
6,Nina,578,2013-05-21,IT
7,Simon,632.8,2013-07-30,Operations
8,Guru,722.5,2014-06-17,Finance
  • 讀取csv檔案
# 讀取csv檔案
data <- read.csv("input.csv")
print(data)

效果:


3110861-073cd4edc8616c85.png 圖2.png
  • 分析csv檔案
# 分析csv檔案
data <- read.csv("input.csv")

print(is.data.frame(data))
print(ncol(data))
print(nrow(data))

效果:


3110861-a294a580046a72d0.png
圖3.png
  • 獲得最高工資
# 獲得最高工資
data <- read.csv("input.csv")
sal <- max(data$salary)
print(sal)

列印結果:


3110861-cb469bf3ae4f2e4f.png 圖4.png
  • 獲取具有最高工資的人的詳細資訊
# 獲取具有最高工資的人的詳細資訊
data <- read.csv("input.csv")
# 獲取最大工資
sal <- max(data$salary)
# 獲取資訊
retval <- subset(data, salary == max(salary))
print(retval)

列印結果:


3110861-424517fccfdee49d.png 圖5.png
  • 獲取所有的IT部門員工資訊
# 獲取所有的IT部門員工的資訊
data <- read.csv("input.csv")
retval <- subset(data, dept == "IT")
print(retval)

列印結果:


3110861-d66a04f391dfb7e4.png 圖6.png
  • 獲得工資大於600的IT部門的人員
# 獲得工資大於600的IT部門的人員
data <- read.csv("input.csv")
info <- subset(data, salary > 600 & dept == "IT")
print(info)

列印結果:


3110861-f61da9dff4339106.png 圖7.png
  • 獲得2014年或之後加入的人
# 獲得2014年或之後加入的人
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
print(retval)

列印結果:


3110861-46eb35cf037d8b37.png 圖8.png
  • 寫入csv
# 寫入csv檔案
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
# 寫入
# write.csv(retval, "output.csv")
# 寫入並刪除附加引數
write.csv(retval, "output.csv", row.names = FALSE)
newData <- read.csv("output.csv")
print(newData)

列印結果:


3110861-c470d769214b58a0.png 圖9.png
2. Excel檔案
  • 安裝xlsx軟體包
# 安裝包
install.packages("xlsx", repos="https://cran.cnr.berkeley.edu/")
  • 驗證並載入包
# 驗證包是否安裝
any(grepl("xlsx",installed.packages()))
# 載入包
library("xlsx")

列印結果:


3110861-0d22577f4755e5f8.png 圖10.png
  • 讀取Excel檔案
# 讀取Excel檔案
library("xlsx")
data <- read.xlsx("input.xlsx", sheetIndex = 1)
print(data)

列印結果:


3110861-2c1abb99fcd0fe56.png 圖11.png
3. 二進位制檔案
  • 語法

writeBin(object, con)
readBin(con, what, n )

以下是所使用的引數的描述 -
-- con是讀取或寫入二進位制檔案的連線物件。
-- object是要寫入的二進位制檔案。
-- what是模式,如字元,整數等表示要讀取的位元組。
-- n是從二進位制檔案讀取的位元組數。

  • 寫入二進位制檔案
# # 寫入二進位制檔案
# 將mtcars資料寫入mtcars.csv
write.table(mtcars, file = "mtcars.csv", row.names = FALSE, na = "", col.names = TRUE, sep = ",")
# 讀取檔案
new.mtcars <- read.table("mtcars.csv", sep = ",", header = TRUE, nrows = 5)
# 寫入檔名
write.filename = file("E:/R/data/binmtcars.dat", "wb")
# 寫為二進位制檔案
writeBin(c("cyl", "am", "gear"), write.filename)
# 寫入記錄
writeBin(c(new.mtcars$cyl, new.mtcars$am, new.mtcars$gear), write.filename)
# 關閉檔案
close(write.filename)
  • 讀取二進位制檔案
# 讀取二進位制檔案
read.filename <- file("E:/R/data/binmtcars.dat", "rb")
# 讀取列
column.names <- readBin(read.filename, character(), n = 3)
# 讀取檔名
read.filename <- file("E:/R/data/binmtcars.dat", "rb")
bindata <- readBin(read.filename, integer(), n = 18)
# 列印
print(bindata)
# 讀取cyl,第4-8個位元組
cyldata = bindata[4:8]
print(cyldata)
# 讀取am,第9-13位元組
amdata = bindata[9:13]
print(amdata)
# 讀取gear
geardata = bindata[14:18]
print(geardata)
# 繫結資料
finaldata = cbind(cyldata, amdata, geardata)
colnames(finaldata) = column.names
print(finaldata)

列印結果:


3110861-1893cb288f6e611d.png 圖12.png
4. XML檔案
  • 安裝
# 安裝包
install.packages("XML", repos="https://cran.cnr.berkeley.edu/")
  • 讀取XML
# 讀取XML檔案
library("XML")
library("methods")
# 讀取檔案
result <- xmlParse(file = "input.xml")
print(result)

列印結果:

E:\R\data>Rscript dataInterface.R
<?xml version="1.0"?>
<RECORDS>
  <EMPLOYEE>
    <ID>1</ID>
    <NAME>Rick</NAME>
    <SALARY>623.3</SALARY>
    <STARTDATE>1/1/2012</STARTDATE>
    <DEPT>IT</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>2</ID>
    <NAME>Dan</NAME>
    <SALARY>515.2</SALARY>
    <STARTDATE>9/23/2013</STARTDATE>
    <DEPT>Operations</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>3</ID>
    <NAME>Michelle</NAME>
    <SALARY>611</SALARY>
    <STARTDATE>11/15/2014</STARTDATE
    <DEPT>IT</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>4</ID>
    <NAME>Ryan</NAME>
    <SALARY>729</SALARY>
    <STARTDATE>5/11/2014</STARTDATE>
    <DEPT>HR</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>5</ID>
    <NAME>Gary</NAME>
    <SALARY>843.25</SALARY>
    <STARTDATE>3/27/2015</STARTDATE>
    <DEPT>Finance</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>6</ID>
    <NAME>Nina</NAME>
    <SALARY>578</SALARY>
    <STARTDATE>5/21/2013</STARTDATE>
    <DEPT>IT</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>7</ID>
    <NAME>Simon</NAME>
    <SALARY>632.8</SALARY>
    <STARTDATE>7/30/2013</STARTDATE>
    <DEPT>Operations</DEPT>
  </EMPLOYEE>
  <EMPLOYEE>
    <ID>8</ID>
    <NAME>Guru</NAME>
    <SALARY>722.5</SALARY>
    <STARTDATE>6/17/2014</STARTDATE>
    <DEPT>Finance</DEPT>
  </EMPLOYEE>
</RECORDS>
  • 獲取XML檔案中存在的節點數
# 獲取XML檔案中存在的節點數
library("XML")
library("methods")
# 讀取檔案
result <- xmlParse(file = "input.xml")
# 獲取根節點
rootnode <- xmlRoot(result)
# 獲取節點數
rootsize <- xmlSize(rootnode)
print(rootsize)

列印結果:


3110861-d92a862b9f8e747b.png 圖13.png
  • 第一個節點的詳細資訊
# 獲取第一個結點的詳細資訊
library("XML")
library("methods")
# 讀取檔案
result <- xmlParse(file = "input.xml")
# 獲取根節點
rootnode <- xmlRoot(result)
# 列印第一個結點詳細資訊
print(rootnode[1])

列印結果:


3110861-e69e839dc510739a.png 圖14.png
  • 獲取節點的不同元素
# 獲取結點的不同元素
library("XML")
library("methods")
# 讀取檔案
result <- xmlParse(file = "input.xml")
# 獲取根節點
rootnode <- xmlRoot(result)
# 列印第一個結點的第一個元素
print(rootnode[[1]][[1]])
# 列印第一個結點的第五個元素
print(rootnode[[1]][[5]])
# 列印第三個幾點的第二個元素
print(rootnode[[3]][[2]])

列印結果:


3110861-09477b594f30c34e.png 圖15.png
  • XML到資料幀
# XML到資料幀
library("XML")
library("methods")
# 轉換XML到資料幀
xmldataframe <- xmlToDataFrame("input.xml")
print(xmldataframe)

列印結果:


3110861-f1a23e210dcd3f2c.png 圖16.png
5. JSON檔案
  • 安裝包
# 安裝包
install.packages("rjson", repos="https://cran.cnr.berkeley.edu/")
  • 讀取JSON檔案
# 讀取JSON檔案
# 載入庫
library("rjson")
# 讀取JSON檔案
result <- fromJSON(file = "input.json")
print(result)

列印結果:


3110861-797fbb0c24f1468d.png 圖17.png
  • JSON轉換為資料幀
# JSON轉換資料幀
# 載入庫
library("rjson")
# 讀取JSON檔案
result <- fromJSON(file = "input.json")
# 轉換為資料幀
json_data_frame <- as.data.frame(result)
print(json_data_frame)

列印結果:


3110861-71f1532bf141c11a.png 圖18.png
6. Web資料
  • 安裝包
# 安裝R語言包
install.packages("RCurl", repos="https://cran.cnr.berkeley.edu/")
install.packages("XML", repos="https://cran.cnr.berkeley.edu/")
install.packages("stringr", repos="https://cran.cnr.berkeley.edu/")
install.packages("plyr", repos="https://cran.cnr.berkeley.edu/")
  • 獲取資料
# 下載檔案
library("RCurl")
library("XML")
library("stringr")
library("plyr")
# 設定url
url <- "http://www.geos.ed.ac.uk/~weather/jcmb_ws/"
# 獲取網頁連結資料
links <- getHTMLLinks(url)
# 獲取包含JCMB_2015的檔名
filenames <- links[str_detect(links, "JCMB_2015")]
# 將檔名轉換為列表
filenames_list <- as.list(filenames)
# 下載檔案
downloadcsv <- function(mainurl, filename) {
    filedetails <- str_c(mainurl, filename)
    download.file(filedetails, filename)
}
# 應用l_ply函式儲存檔案
l_ply(filenames, downloadcsv, mainurl = "http://www.geos.ed.ac.uk/~weather/jcmb_ws/")

程式碼下載