R语言--数据接口(五)

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))

效果:


图3.png
  • 获得最高工资
# 获得最高工资
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/")

代码下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容