R語言--資料介面(五)
阿新 • • 發佈:2019-01-04
1. CSV檔案
- 獲取和設定工作目錄
# 獲取和設定工作目錄
print(getwd())
# 設定當前工作目錄
setwd("E:/R")
print(getwd())
列印結果:
圖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)
效果:
圖2.png
- 分析csv檔案
# 分析csv檔案
data <- read.csv("input.csv")
print(is.data.frame(data))
print(ncol(data))
print(nrow(data))
效果:
- 獲得最高工資
# 獲得最高工資
data <- read.csv("input.csv")
sal <- max(data$salary)
print(sal)
列印結果:
圖4.png
- 獲取具有最高工資的人的詳細資訊
# 獲取具有最高工資的人的詳細資訊 data <- read.csv("input.csv") # 獲取最大工資 sal <- max(data$salary) # 獲取資訊 retval <- subset(data, salary == max(salary)) print(retval)
列印結果:
圖5.png
- 獲取所有的IT部門員工資訊
# 獲取所有的IT部門員工的資訊
data <- read.csv("input.csv")
retval <- subset(data, dept == "IT")
print(retval)
列印結果:
圖6.png
- 獲得工資大於600的IT部門的人員
# 獲得工資大於600的IT部門的人員
data <- read.csv("input.csv")
info <- subset(data, salary > 600 & dept == "IT")
print(info)
列印結果:
圖7.png
- 獲得2014年或之後加入的人
# 獲得2014年或之後加入的人
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
print(retval)
列印結果:
圖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)
列印結果:
圖9.png
2. Excel檔案
- 安裝xlsx軟體包
# 安裝包
install.packages("xlsx", repos="https://cran.cnr.berkeley.edu/")
- 驗證並載入包
# 驗證包是否安裝
any(grepl("xlsx",installed.packages()))
# 載入包
library("xlsx")
列印結果:
圖10.png
- 讀取Excel檔案
# 讀取Excel檔案
library("xlsx")
data <- read.xlsx("input.xlsx", sheetIndex = 1)
print(data)
列印結果:
圖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)
列印結果:
圖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)
列印結果:
圖13.png
- 第一個節點的詳細資訊
# 獲取第一個結點的詳細資訊
library("XML")
library("methods")
# 讀取檔案
result <- xmlParse(file = "input.xml")
# 獲取根節點
rootnode <- xmlRoot(result)
# 列印第一個結點詳細資訊
print(rootnode[1])
列印結果:
圖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]])
列印結果:
圖15.png
- XML到資料幀
# XML到資料幀
library("XML")
library("methods")
# 轉換XML到資料幀
xmldataframe <- xmlToDataFrame("input.xml")
print(xmldataframe)
列印結果:
圖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)
列印結果:
圖17.png
- JSON轉換為資料幀
# JSON轉換資料幀
# 載入庫
library("rjson")
# 讀取JSON檔案
result <- fromJSON(file = "input.json")
# 轉換為資料幀
json_data_frame <- as.data.frame(result)
print(json_data_frame)
列印結果:
圖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/")