CSV文件
从csv文件读取数据,然后将数据写入csv文件。 该文件应该存在于当前工作目录中,以便R语言可以读取它。 当然我们也可以设置我们自己的目录并从那里读取文件。
获取和设置工作目录
使用getwd()函数检查R语言工作区指向的目录。 还可以使用setwd()函数设置新的工作目录。
示例:
输入:
# Get and print current working directory.
print(getwd())
# Set current working directory.
setwd("/web/com")
# Get and print current working directory.
print(getwd())
输出:
[1] "D:/untitled"
[1] "/web/com"
注:
此结果取决于使用者的操作系统和当前工作的目录。
输入为CSV文件
csv文件是一个文本文件,其中列中的值由逗号分隔。 让我们考虑名为input.csv的文件中出现的以下数据。
可以通过复制和粘贴此数据使用Windows记事本创建此文件。 使用记事本中的保存为所有文件(.)选项将文件保存为input.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文件
以下是read.csv()函数的一个简单示例,用于读取当前工作目录中可用的CSV文件。
示例:
输入:
data <- read.csv("input.csv")
print(data)
输出:
id name salary start_date dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
分析CSV文件
默认情况下,read.csv()函数将输出作为数据帧。 这可以容易地如下检查。 此外,我们可以检查列和行的数量。
示例:
输入:
data <- read.csv("input.csv")
print(is.data.frame(data))
print(ncol(data))
print(nrow(data))
输出:
[1] TRUE
[1] 5
[1] 8
而一旦我们读取数据帧中的数据,我们就可以应用所有适用于数据帧的函数。
获得最高工资
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
# Get the max salary from data frame.
sal <- max(data$salary)
print(sal)
输出:
[1] 843.25
获取具有最高工资的人的详细信息
我们可以获取满足特定过滤条件的行,类似于sql where子句。
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
# Get the person detail having max salary.
retval <- subset(data, salary == max(salary))
print(retval)
输出:
id name salary start_date dept
5 NA Gary 843.25 2015-03-27 Finance
附:
R语言中的subset()函数用于创建数据帧的子集。这也可用于从数据帧中删除列。
subset(df,expr)
df:使用的数据帧
expr:子集的条件
获取所有IT部门员工的信息
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset( data, dept == "IT")
print(retval)
输出:
id name salary start_date dept
1 1 Rick 623.3 2012-01-01 IT
3 3 Michelle 611.0 2014-11-15 IT
6 6 Nina 578.0 2013-05-21 IT
获取工资大于600的IT部门的人员
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
info <- subset(data, salary > 600 & dept == "IT")
print(info)
输出:
id name salary start_date dept
1 1 Rick 623.3 2012-01-01 IT
3 3 Michelle 611.0 2014-11-15 IT
获得2014年或之后加入的人
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
print(retval)
输出:
id name salary start_date dept
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
8 8 Guru 722.50 2014-06-17 Finance
写入CSV文件
R语言可以创建csv文件形式的现有数据帧。 write.csv()函数用于创建csv文件。 此文件在工作目录中创建。
示例:
输入:
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
# Write filtered data into a new file.
write.csv(retval,"output.csv")
newdata <- read.csv("output.csv")
print(newdata)
输出:
X id name salary start_date dept
1 3 3 Michelle 611.00 2014-11-15 IT
2 4 4 Ryan 729.00 2014-05-11 HR
3 5 NA Gary 843.25 2015-03-27 Finance
4 8 8 Guru 722.50 2014-06-17 Finance
可以看到,在目录中生成了一个新的文件 —— output.csv
上述输出中的列X来数字数据集newper。这可以在写入文件时使用附加参数删除。
输入:
# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
# Write filtered data into a new file.
write.csv(retval,"output.csv", row.names = FALSE)
newdata <- read.csv("output.csv")
print(newdata)
输出:
id name salary start_date dept
1 3 Michelle 611.00 2014-11-15 IT
2 4 Ryan 729.00 2014-05-11 HR
3 NA Gary 843.25 2015-03-27 Finance
4 8 Guru 722.50 2014-06-17 Finance
Excel文件
Microsoft Excel是最广泛使用的电子表格程序,以.xls或.xlsx格式存储数据。 R语言可以直接从这些文件使用一些excel特定的包。 很少这样的包是 - XLConnect,xlsx,gdata等。我们将使用xlsx包。 R语言也可以使用这个包写入excel文件。
安装xlsx包
在R控制台中使用以下命令来安装“xlsx”软件包。 它可能会要求安装一些额外的软件包这个软件包依赖。 按照具有所需软件包名称的同一命令安装其他软件包。
输入:
install.packages("xlsx")
输出:
验证并加载“xlsx”软件包
使用以下命令验证并加载“xlsx”软件包
输入:
# Verify the package is installed.
any(grepl("xlsx",installed.packages()))
# Load the library into R workspace.
library("xlsx")
输出:
[1] TRUE
Error: package or namespace load failed for ‘xlsx’:
loadNamespace()里算'rJava'时.onLoad失败了,详细内容:
调用: fun(libname, pkgname)
错误: JAVA_HOME cannot be determined from the Registry
此处报错是因为电脑中未安装或者未能正确配置java环境,通过下载相应的JDK即可解决,此问题不解决,会直接影响后续Excel文件的读取。 (JDK的下载网上搜索即有一大堆)
输入为xlsx文件
打开Microsoft Excel。 将以下数据复制并粘贴到名为sheet1的工作表中。
id name salary start_date dept
1 Rick 623.3 1/1/2012 IT
2 Dan 515.2 9/23/2013 Operations
3 Michelle 611 11/15/2014 IT
4 Ryan 729 5/11/2014 HR
5 Gary 843.25 3/27/2015 Finance
6 Nina 578 5/21/2013 IT
7 Simon 632.8 7/30/2013 Operations
8 Guru 722.5 6/17/2014 Finance
还要将以下数据复制并粘贴到另一个工作表,并将此工作表重命名为“city”。
name city
Rick Seattle
Dan Tampa
Michelle Chicago
Ryan Seattle
Gary Houston
Nina Boston
Simon Mumbai
Guru Dallas
将Excel文件另存为“input.xlsx”。 应将其保存在R工作区的当前工作目录中。
读取Excel文件
通过使用read.xlsx()函数读取input.xlsx,如下所示。 结果作为数据帧存储在R语言环境中。
输入:
# Read the first worksheet in the file input.xlsx.
data <- read.xlsx("input.xlsx", sheetIndex = 1)
print(data)
输出:
id name salary start_date dept
1 1 Rick 623.30 1/1/2012 IT
2 2 Dan 515.20 9/23/2013 Operations
3 3 Michelle 611.00 11/15/2014 IT
4 4 Ryan 729.00 5/11/2014 HR
5 5 Gary 843.25 3/27/2015 Finance
6 6 Nina 578.00 5/21/2013 IT
7 7 Simon 632.80 7/30/2013 Operations
8 8 Guru 722.50 6/17/2014 Finance
注:
此处复制到Excel文件中应该每个数据占据一个,直接复制粘贴不满足此条件,输出也有所区别。
二进制文件
二进制文件是包含仅以位和字节(0和1)的形式存储的信息的文件。它们不是人类可读的,因为它中的字节转换为包含许多其他不可打印字符的字符和符号。尝试使用任何文本编辑器读取二进制文件将显示如Ø和ð的字符。
二进制文件必须由特定程序读取才能使用。例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式。这表示,除了人类可读的文本之外,还有更多的信息,例如字符和页码等的格式化,它们也与字母数字字符一起存储。最后一个二进制文件是一个连续的字节序列。我们在文本文件中看到的换行符是连接第一行到下一行的字符。
有时,由其他程序生成的数据需要由R作为二进制文件处理。另外,R语言是创建可以与其他程序共享的二进制文件所必需的。
R语言有两个函数**writeBin()和readBin()**来创建和读取二进制文件。
writeBin()和readBin()函数语法
writeBin(object, con)
readBin(con, what, n )
con:读取或写入二进制文件的连接对象
object:要写入的二进制文件
what:一个对象,其模式将给出要读取的向量的模式,或者一个长度为1的字符向量,描述该模式:“数字”、“双精度”、“整数”、“整数”、“逻辑”、“复杂”、“字符”、“原始”之一
n:从二进制文件读取的字节数
示例:
我们考虑R语言内置数据“mtcars”。 首先,我们从它创建一个csv文件,并将其转换为二进制文件,并将其存储为操作系统文件。 接下来我们读取这个创建的二进制文件。
写入二进制文件
将数据帧“mtcars”读取为csv文件,然后将其作为二进制文件写入操作系统。
输入:
# Read the "mtcars" data frame as a csv file and store only the columns "cyl", "am" and "gear".
mt<-data.frame(mtcars$cyl,mtcars$am,mtcars$gear)
nam<-c("cyl","am","gear")
colnames(mt)=nam
write.table(mt, file = "mtcars.csv",row.names = FALSE, na = "",
col.names = TRUE, sep = ",")
# Store 5 records from the csv file as a new data frame.
new.mtcars <- read.table("mtcars.csv",sep = ",",header = TRUE,nrows = 5)
# Create a connection object to write the binary file using mode "wb".
write.filename = file("/untitled/binmtcars.dat", "wb")
# Write the column names of the data frame to the connection object.
writeBin(colnames(new.mtcars), write.filename)
# Write the records in each of the column to the file.
writeBin(c(new.mtcars$cyl,new.mtcars$am,new.mtcars$gear), write.filename)
# Close the file for writing so that it can be read by other program.
close(write.filename)
注:
- write.filename = file(“/untitled/binmtcars.dat”, “wb”) 此处的地址为文件存储位置,存储位置会生成相应的.csv文件。
- 因示例中的代码与注释有出入,且运行结果与预期结果不一致,故有所修改。
读取二进制文件
上面创建的二进制文件将所有数据存储为连续字节。 因此,我们将通过选择适当的列名称值和列值来读取它。
输入:
# Create a connection object to read the file in binary mode using "rb".
read.filename <- file("/untitled/binmtcars.dat", "rb")
# First read the column names. n = 3 as we have 3 columns.
column.names <- readBin(read.filename, character(), n = 3)
# Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename <- file("/untitled/binmtcars.dat", "rb")
bindata <- readBin(read.filename, integer(), n = 18)
# Print the data.
print(bindata)
# Read the values from 4th byte to 8th byte which represents "cyl".
cyldata = bindata[4:8]
print(cyldata)
# Read the values form 9th byte to 13th byte which represents "am".
amdata = bindata[9:13]
print(amdata)
# Read the values form 9th byte to 13th byte which represents "gear".
geardata = bindata[14:18]
print(geardata)
# Combine all the read values to a dat frame.
finaldata = cbind(cyldata, amdata, geardata)
colnames(finaldata) = column.names
print(finaldata)
注:
read.filename <- file(“/untitled/binmtcars.dat”, “rb”) 此处同上。
输出:
[1] 7108963 1728081249 7496037 6 6 4
[7] 6 8 1 1 1 0
[13] 0 4 4 4 3 3
[1] 6 6 4 6 8
[1] 1 1 1 0 0
[1] 4 4 4 3 3
cyl am gear
[1,] 6 1 4
[2,] 6 1 4
[3,] 4 1 4
[4,] 6 0 3
[5,] 8 0 3
成功读取R中的二进制文件得到原始数据。
XML文件
XML是一种文件格式,它使用标准ASCII文本共享万维网,内部网和其他地方的文件格式和数据。 它代表可扩展标记语言(XML)。 类似于HTML它包含标记标签。 但是与HTML中的标记标记描述页面的结构不同,在XML中,标记描述了包含在文件中的数据的含义。
可以使用**“XML”包**读取R语言中的xml文件。 此软件包可以使用以下命令安装。
install.packages("XML")
输入数据
通过将以下数据复制到文本编辑器(如记事本)中来创建XMl文件。 使用.xml扩展名保存文件,并将文件类型选择为所有文件(.)。
输入:
<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文件由R语言使用函数xmlParse()读取。 它作为列表存储在R语言中。
输入:
# Load the package required to read XML files.
library("XML")
# Also load the other required package.
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
# Print the result.
print(result)
输出:
1
Rick
623.3
1/1/2012
IT
2
Dan
515.2
9/23/2013
Operations
3
Michelle
611
11/15/2014
IT
4
Ryan
729
5/11/2014
HR
5
Gary
843.25
3/27/2015
Finance
6
Nina
578
5/21/2013
IT
7
Simon
632.8
7/30/2013
Operations
8
Guru
722.5
6/17/2014
Finance
获取XML文件中存在的节点数
输入:
# Load the packages required to read XML files.
library("XML")
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
# Exract the root node form the xml file.
rootnode <- xmlRoot(result)
# Find number of nodes in the root.
rootsize <- xmlSize(rootnode)
# Print the result.
print(rootsize)
输出:
output
[1] 8
第一个节点的详细信息
让我们看看解析文件的第一条记录。 它将给我们一个关于存在于顶层节点中的各种元素的想法。
输入:
# Load the packages required to read XML files.
library("XML")
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
# Exract the root node form the xml file.
rootnode <- xmlRoot(result)
# Print the result.
print(rootnode[1])
输出:
$EMPLOYEE
1
Rick
623.3
1/1/2012
IT
attr(,"class")
[1] "XMLInternalNodeList" "XMLNodeList"
获取节点的不同元素
输入:
# Load the packages required to read XML files.
library("XML")
library("methods")
# Give the input file name to the function.
result <- xmlParse(file = "input.xml")
# Exract the root node form the xml file.
rootnode <- xmlRoot(result)
# Get the first element of the first node.
print(rootnode[[1]][[1]])
# Get the fifth element of the first node.
print(rootnode[[1]][[5]])
# Get the second element of the third node.
print(rootnode[[3]][[2]])
输出:
1
IT
Michelle
XML到数据帧
为了在大文件中有效地处理数据,我们将xml文件中的数据作为数据帧读取。 然后处理数据帧以进行数据分析。
输入:
# Load the packages required to read XML files.
library("XML")
library("methods")
# Convert the input xml file to a data frame.
xmldataframe <- xmlToDataFrame("input.xml")
print(xmldataframe)
输出:
ID NAME SALARY STARTDATE DEPT
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
JSON文件
json文件以人类可读格式将数据存储为文本。 Json代表javascript Object Notation。 R可以使用rjson包读取JSON文件。
安装rjson包
在R语言控制台中,通过以下命令来安装rjson包。
输入:
install.packages("rjson")
输入数据
通过将以下数据复制到文本编辑器(如记事本)中来创建JSON文件。 使用.json扩展名保存文件,并将文件类型选择为所有文件(.)。
输入:
{
"ID":["1","2","3","4","5","6","7","8" ],
"Name":["Rick","Dan","Michelle","Ryan","Gary","Nina","Simon","Guru" ],
"Salary":["623.3","515.2","611","729","843.25","578","632.8","722.5" ],
"StartDate":[ "1/1/2012","9/23/2013","11/15/2014","5/11/2014","3/27/2015","5/21/2013",
"7/30/2013","6/17/2014"],
"Dept":[ "IT","Operations","IT","HR","Finance","IT","Operations","Finance"]
}
读取JSON文件
JSON文件由R使用来自JSON()的函数读取。 它作为列表存储在R中。
输入:
# Load the package required to read JSON files.
library("rjson")
# Give the input file name to the function.
result <- fromJSON(file = "input.json")
# Print the result.
print(result)
输出:
$ID
[1] "1" "2" "3" "4" "5" "6" "7" "8"
$Name
[1] "Rick" "Dan" "Michelle" "Ryan" "Gary" "Nina" "Simon" "Guru"
$Salary
[1] "623.3" "515.2" "611" "729" "843.25" "578" "632.8" "722.5"
$StartDate
[1] "1/1/2012" "9/23/2013" "11/15/2014" "5/11/2014" "3/27/2015" "5/21/2013"
"7/30/2013" "6/17/2014"
$Dept
[1] "IT" "Operations" "IT" "HR" "Finance" "IT"
"Operations" "Finance"
将JSON转换为数据帧
我们可以使用as.data.frame()函数将上面提取的数据转换为R语言数据帧以进行进一步分析。
输入:
# Load the package required to read JSON files.
library("rjson")
# Give the input file name to the function.
result <- fromJSON(file = "input.json")
# Convert JSON file to a data frame.
json_data_frame <- as.data.frame(result)
print(json_data_frame)
输出:
id, name, salary, start_date, dept
1 1 Rick 623.30 2012-01-01 IT
2 2 Dan 515.20 2013-09-23 Operations
3 3 Michelle 611.00 2014-11-15 IT
4 4 Ryan 729.00 2014-05-11 HR
5 NA Gary 843.25 2015-03-27 Finance
6 6 Nina 578.00 2013-05-21 IT
7 7 Simon 632.80 2013-07-30 Operations
8 8 Guru 722.50 2014-06-17 Finance
Web数据
许多网站提供数据供其用户使用。 例如,世界卫生组织(WHO)以CSV,txt和XML文件的形式提供健康和医疗信息的报告。 使用R语言程序,我们可以从这些网站以编程方式提取特定数据。
R语言中用于从网站中提取数据的一些包是“Rcurl”,XML“和”stringr“,它们用于连接到URL,识别文件所需的链接并将它们下载到本地环境。
安装R语言的包
处理URL和链接到文件需要以下的包。 如果它们在R语言环境中不可用,您可以使用以下命令安装它们。
install.packages("RCurl")
install.packages("XML")
install.packages("stringr")
install.packages("plyr")
注:
若安装报错,一般换个镜像即可。
输入数据
我们将访问URL天气数据,并使用R在2015年下载CSV文件。
示例:
我们将使用函数getHTMLLinks()来收集文件的URL。 然后我们将使用函数downlaod.file()将文件保存到本地系统。 由于我们将对多个文件一次又一次地应用相同的代码,因此我们将创建一个被多次调用的函数。 文件名作为参数以R列表对象的形式传递到此函数。
输入:
# Read the URL.
url <- "http://www.geos.ed.ac.uk/~weather/jcmb_ws/"
# Gather the html links present in the webpage.
links <- getHTMLLinks(url)
# Identify only the links which point to the JCMB 2015 files.
filenames <- links[str_detect(links, "JCMB_2015")]
# Store the file names as a list.
filenames_list <- as.list(filenames)
# Create a function to download the files by passing the URL and filename list.
downloadcsv <- function (mainurl,filename) {
filedetails <- str_c(mainurl,filename)
download.file(filedetails,filename)
}
# Now apply the l_ply function and save the files into the current R working directory.
l_ply(filenames,downloadcsv,mainurl = "http://www.geos.ed.ac.uk/~weather/jcmb_ws/")
验证文件下载
运行上述代码后,您可以在当前R语言工作目录中找到以下文件。
"JCMB_2015.csv" "JCMB_2015_Apr.csv" "JCMB_2015_Feb.csv" "JCMB_2015_Jan.csv"
"JCMB_2015_Mar.csv"
数据库
数据是关系数据库系统以规范化格式存储。 因此,要进行统计计算,我们将需要非常先进和复杂的sql查询。 但R语言可以轻松地连接到许多关系数据库,如mysql,oracle,Sql服务器等,并从它们获取记录作为数据框。 一旦数据在R语言环境中可用,它就变成正常的R语言数据集,并且可以使用所有强大的包和函数来操作或分析。
在本教程中,我们将使用MySql作为连接到R语言的参考数据库。
RmySQL包
R语言有一个名为“RMySQL”的内置包,它提供与MySql数据库之间的本地连接。 可以使用以下命令在R语言环境中安装此软件包。
输入:
install.packages("RMySQL")
将R连接到MySql
一旦安装了包,我们在R中创建一个连接对象以连接到数据库。 它使用用户名,密码,数据库名称和主机名作为输入。一旦安装了包,我们在R中创建一个连接对象以连接到数据库。 它使用用户名,密码,数据库名称和主机名作为输入。
输入:
# Create a connection Object to MySQL database.
# We will connect to the sampel database named "sakila" that comes with MySql installation.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
host = 'localhost')
# List the tables available in this database.
dbListTables(mysqlconnection)
输出:
[1] "actor" "actor_info"
[3] "address" "category"
[5] "city" "country"
[7] "customer" "customer_list"
[9] "film" "film_actor"
[11] "film_category" "film_list"
[13] "film_text" "inventory"
[15] "language" "nicer_but_slower_film_list"
[17] "payment" "rental"
[19] "sales_by_film_category" "sales_by_store"
[21] "staff" "staff_list"
[23] "store"
查询表
我们可以使用函数dbSendQuery()查询MySql中的数据库表。 查询在MySql中执行,并使用R语言fetch()函数返回结果集。 最后,它被存储为R语言中的数据帧。
输入:
# Query the "actor" tables to get all the rows.
result = dbSendQuery(mysqlconnection, "select * from actor")
# Store the result in a R data frame object. n = 5 is used to fetch first 5 rows.
data.frame = fetch(result, n = 5)
print(data.fame)
输出:
actor_id first_name last_name last_update
1 1 PENELOPE GUINESS 2006-02-15 04:34:33
2 2 NICK WAHLBERG 2006-02-15 04:34:33
3 3 ED CHASE 2006-02-15 04:34:33
4 4 JENNIFER DAVIS 2006-02-15 04:34:33
5 5 JOHNNY LOLLOBRIGIDA 2006-02-15 04:34:33
带过滤条件的查询
我们可以传递任何有效的select查询来获取结果。
输入:
result = dbSendQuery(mysqlconnection, "select * from actor where last_name = 'TORN'")
# Fetch all the records(with n = -1) and store it as a data frame.
data.frame = fetch(result, n = -1)
print(data)
输出:
actor_id first_name last_name last_update
1 18 DAN TORN 2006-02-15 04:34:33
2 94 KENNETH TORN 2006-02-15 04:34:33
3 102 WALTER TORN 2006-02-15 04:34:33
更新表中的行
我们可以通过将更新查询传递给dbSendQuery()函数来更新Mysql表中的行。
dbSendQuery(mysqlconnection, "update mtcars set disp = 168.5 where hp = 110")
在执行上面的代码后,我们可以看到在MySql环境中更新的表。
将数据插入表中
dbSendQuery(mysqlconnection,
"insert into mtcars(row_names, mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb)
values('New Mazda RX4 Wag', 21, 6, 168.5, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4)"
)
在执行上面的代码后,我们可以看到插入到MySql环境中的表中的行。
在MySQL中创建表
我们可以在MySql中使用**函数dbWriteTable()**创建表。 如果表已经存在,它将覆盖该表,并将数据帧用作输入。
输入:
# Create the connection object to the database where we want to create the table.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
host = 'localhost')
# Use the R data frame "mtcars" to create the table in MySql.
# All the rows of mtcars are taken inot MySql.
dbWriteTable(mysqlconnection, "mtcars", mtcars[, ], overwrite = TRUE)
执行上面的代码后,我们可以看到在MySql环境中创建的表。
删除MySQL中的表
我们可以删除MySql数据库中的表,将drop table语句传递到**dbSendQuery()**中,就像我们使用它查询表中的数据一样。
dbSendQuery(mysqlconnection, 'drop table if exists mtcars')
执行上面的代码后,我们可以看到表在MySql环境中被删除。