上一篇:[R语言——基础篇](https://www.jianshu.com/p/46861fe24361)
1.条形图
条形图表示矩形条中的数据,条的长度与变量的值成比例。 R语言使用函数barplot()创建条形图。 R语言可以在条形图中绘制垂直和水平条。 在条形图中,每个条可以给予不同的颜色。
语法
在R语言中创建条形图的基本语法是 -
barplot(H, xlab, ylab, main, names.arg, col)
以下是所使用的参数的描述 -
H是包含在条形图中使用的数值的向量或矩阵。
xlab是x轴的标签。
ylab是y轴的标签。
main是条形图的标题。
names.arg是在每个条下出现的名称的向量。
col用于向图中的条形提供颜色。
例
使用输入向量和每个条的名称创建一个简单的条形图。
以下脚本将创建并保存当前R语言工作目录中的条形图。
# Give the chart file a name.
png(file = "barchart.png")
# Plot the bar chart.
barplot(H)
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
条形图标签,标题和颜色
可以通过添加更多参数来扩展条形图的功能。 主要参数用于添加标题。 col参数用于向条形添加颜色。 args.name是具有与输入向量相同数量的值的向量,以描述每个条的含义。
例
以下脚本将在当前R语言工作目录中创建并保存条形图。
# Create the data for the chart.
H <- c(7,12,28,3,41)
M <- c("Mar","Apr","May","Jun","Jul")
# Give the chart file a name.
png(file = "barchart_months_revenue.png")
# Plot the bar chart.
barplot(H,names.arg = M,xlab = "Month",ylab = "Revenue",col = "blue",
main = "Revenue chart",border = "red")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
组合条形图和堆积条形图
我们可以使用矩阵作为输入值,在每个条中创建条形图和堆叠组的条形图。
超过两个变量表示为用于创建组合条形图和堆叠条形图的矩阵。
# Create the input vectors.
colors <- c("green","orange","brown")
months <- c("Mar","Apr","May","Jun","Jul")
regions <- c("East","West","North")
# Create the matrix of the values.
Values <- matrix(c(2,9,3,11,9,4,8,7,3,12,5,2,8,10,11),nrow = 3,ncol = 5,byrow = TRUE)
# Give the chart file a name.
png(file = "barchart_stacked.png")
# Create the bar chart.
barplot(Values,main = "total revenue",names.arg = months,xlab = "month",ylab = "revenue",
col = colors)
# Add the legend to the chart.
legend("topleft", regions, cex = 1.3, fill = colors)
# Save the file.
dev.off()
2.箱线图
箱线图是数据集中的数据分布良好的度量。 它将数据集分成三个四分位数。 此图表表示数据集中的最小值,最大值,中值,第一四分位数和第三四分位数。 它还可用于通过绘制每个数据集的箱线图来比较数据集之间的数据分布。
R语言中使用boxplot()函数来创建箱线图。
语法
在R语言中创建箱线图的基本语法是 -
boxplot(x, data, notch, varwidth, names, main)
以下是所使用的参数的描述 -
x是向量或公式。
数据是数据帧。
notch是逻辑值。 设置为TRUE以绘制凹口。
varwidth是一个逻辑值。 设置为true以绘制与样本大小成比例的框的宽度。
names是将打印在每个箱线图下的组标签。
main用于给图表标题。
例
我们使用R语言环境中可用的数据集“mtcars”来创建基本箱线图。 让我们看看mtcars中的列“mpg”和“cyl”。
input <- mtcars[,c('mpg','cyl')]
print(head(input))
当我们执行上面的代码,它会产生以下结果 -
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
Valiant 18.1 6
创建箱线图
以下脚本将为mpg(英里/加仑)和cyl(气缸数)之间的关系创建箱线图。
# Give the chart file a name.
png(file = "boxplot.png")
# Plot the chart.
boxplot(mpg ~ cyl, data = mtcars, xlab = "Number of Cylinders",
ylab = "Miles Per Gallon", main = "Mileage Data")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
带槽的箱线图
我们可以绘制带槽的箱线图,以了解不同数据组的中值如何相互匹配。
以下脚本将为每个数据组创建一个带缺口的箱线图。
# Give the chart file a name.
png(file = "boxplot_with_notch.png")
# Plot the chart.
boxplot(mpg ~ cyl, data = mtcars,
xlab = "Number of Cylinders",
ylab = "Miles Per Gallon",
main = "Mileage Data",
notch = TRUE,
varwidth = TRUE,
col = c("green","yellow","purple"),
names = c("High","Medium","Low")
)
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
[图片上传中...(image-9f3e39-1552623568628-0)]
3.直方图
直方图表示被存储到范围中的变量的值的频率。 直方图类似于条形图,但不同之处在于将值分组为连续范围。 直方图中的每个柱表示该范围中存在的值的数量的高度。
R语言使用hist()函数创建直方图。 此函数使用向量作为输入,并使用一些更多的参数来绘制直方图。
语法
使用R语言创建直方图的基本语法是 -
hist(v,main,xlab,xlim,ylim,breaks,col,border)
以下是所使用的参数的描述 -
v是包含直方图中使用的数值的向量。
main表示图表的标题。
col用于设置条的颜色。
border用于设置每个条的边框颜色。
xlab用于给出x轴的描述。
xlim用于指定x轴上的值的范围。
ylim用于指定y轴上的值的范围。
break用于提及每个条的宽度。
例
使用输入vector,label,col和边界参数创建一个简单的直方图。
下面给出的脚本将创建并保存当前R语言工作目录中的直方图。
# Create data for the graph.
v <- c(9,13,21,8,36,22,12,41,31,33,19)
# Give the chart file a name.
png(file = "histogram.png")
# Create the histogram.
hist(v,xlab = "Weight",col = "yellow",border = "blue")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
X和Y值的范围
要指定X轴和Y轴允许的值的范围,我们可以使用xlim和ylim参数。
每个条的宽度可以通过使用间隔来确定。
# Create data for the graph.
v <- c(9,13,21,8,36,22,12,41,31,33,19)
# Give the chart file a name.
png(file = "histogram_lim_breaks.png")
# Create the histogram.
hist(v,xlab = "Weight",col = "green",border = "red", xlim = c(0,40), ylim = c(0,5),
breaks = 5)
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
[图片上传中...(image-d6f09b-1552623852107-0)]
4.折线图
折线图是通过在它们之间绘制线段来连接一系列点的图。这些点在它们的坐标(通常是x坐标)值之一中排序。折线图通常用于识别数据中的趋势。
R语言中的情节()函数用于创建折线图。
语法
在R语言中创建折线图的基本语法是 -
plot(v,type,col,xlab,ylab)
以下是所使用的参数的描述 -
是包含数值的向量。
类型采用值“P”仅绘制点,“升”仅绘制线和“o”的绘制点和线。
xlab是X轴的标签。
ylab是Ÿ轴的标签。
主要是图表的标题。
山坳用于给点和线的颜色。
例
使用输入向量和类型参数“O”创建简单的折线图。以下脚本将在当前R工作目录中创建并保存折线图。
# Create the data for the chart.
v <- c(7,12,28,3,41)
# Give the chart file a name.
png(file = "line_chart.jpg")
# Plot the bar chart.
plot(v,type = "o")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
[图片上传中...(image-469771-1552624000469-2)]
折线图标题,颜色和标签
线图的特征可以通过使用附加参数来扩展。我们向点和线添加颜色,为图表添加标题,并向轴添加标签。
例
# Create the data for the chart.
v <- c(7,12,28,3,41)
# Give the chart file a name.
png(file = "line_chart_label_colored.jpg")
# Plot the bar chart.
plot(v,type = "o", col = "red", xlab = "Month", ylab = "Rain fall",
main = "Rain fall chart")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
多线型折线图
通过使用lines()函数,可以在同一个图表上绘制多条线。
在绘制第一行之后,lines ()函数可以使用一个额外的向量作为输入来绘制图表中的第二行。
# Create the data for the chart.
v <- c(7,12,28,3,41)
t <- c(14,7,6,19,3)
# Give the chart file a name.
png(file = "line_chart_2_lines.jpg")
# Plot the bar chart.
plot(v,type = "o",col = "red", xlab = "Month", ylab = "Rain fall",
main = "Rain fall chart")
lines(t, type = "o", col = "blue")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
5.散点图
散点图显示在笛卡尔平面中绘制的许多点。 每个点表示两个变量的值。 在水平轴上选择一个变量,在垂直轴上选择另一个变量。
使用plot()函数创建简单散点图。
语法
在R语言中创建散点图的基本语法是 -
plot(x, y, main, xlab, ylab, xlim, ylim, axes)
以下是所使用的参数的描述 -
x是其值为水平坐标的数据集。
y是其值是垂直坐标的数据集。
main要是图形的图块。
xlab是水平轴上的标签。
ylab是垂直轴上的标签。
xlim是用于绘图的x的值的极限。
ylim是用于绘图的y的值的极限。
axes指示是否应在绘图上绘制两个轴。
例
我们使用R语言环境中可用的数据集“mtcars”来创建基本散点图。 让我们使用mtcars中的“wt”和“mpg”列。
input <- mtcars[,c('wt','mpg')]
print(head(input))
当我们执行上面的代码,它产生以下结果 -
wt mpg
Mazda RX4 2.620 21.0
Mazda RX4 Wag 2.875 21.0
Datsun 710 2.320 22.8
Hornet 4 Drive 3.215 21.4
Hornet Sportabout 3.440 18.7
Valiant 3.460 18.1
创建散点图
以下脚本将为wt(重量)和mpg(英里/加仑)之间的关系创建一个散点图。
# Get the input values.
input <- mtcars[,c('wt','mpg')]
# Give the chart file a name.
png(file = "scatterplot.png")
# Plot the chart for cars with weight between 2.5 to 5 and mileage between 15 and 30.
plot(x = input$wt,y = input$mpg,
xlab = "Weight",
ylab = "Milage",
xlim = c(2.5,5),
ylim = c(15,30),
main = "Weight vs Milage"
)
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
散点图矩阵
当我们有两个以上的变量,我们想找到一个变量和其余变量之间的相关性,我们使用散点图矩阵。 我们使用pairs()函数创建散点图的矩阵。
语法
在R中创建散点图矩阵的基本语法是 -
pairs(formula, data)
以下是所使用的参数的描述 -
formula表示成对使用的一系列变量。
data表示将从其获取变量的数据集。
例
每个变量与每个剩余变量配对。 为每对绘制散点图。
# Give the chart file a name.
png(file = "scatterplot_matrices.png")
# Plot the matrices between 4 variables giving 12 plots.
# One variable with 3 others and total 4 variables.
pairs(~wt+mpg+disp+cyl,data = mtcars,
main = "Scatterplot Matrix")
# Save the file.
dev.off()
当执行上面的代码中,我们得到以下输出。
6.饼状图
R编程语言有许多库来创建图表和图表。 饼图是将值表示为具有不同颜色的圆的切片。 切片被标记,并且对应于每个片的数字也在图表中表示。
在R语言中,饼图是使用pie()函数创建的,它使用正数作为向量输入。 附加参数用于控制标签,颜色,标题等。
语法
使用R语言创建饼图的基本语法是 -
pie(x, labels, radius, main, col, clockwise)
以下是所使用的参数的描述 -
x是包含饼图中使用的数值的向量。
labels用于给出切片的描述。
radius表示饼图圆的半径(值-1和+1之间)。
main表示图表的标题。
col表示调色板。
clockwise是指示片段是顺时针还是逆时针绘制的逻辑值。
例
使用输入向量和标签创建一个非常简单的饼图。 以下脚本将创建并保存当前R语言工作目录中的饼图。
# Create data for the graph.
x <- c(21, 62, 10, 53)
labels <- c("London", "New York", "Singapore", "Mumbai")
# Give the chart file a name.
png(file = "city.jpg")
# Plot the chart.
pie(x,labels)
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
饼图标题和颜色
我们可以通过向函数中添加更多参数来扩展图表的功能。 我们将使用参数+ + main向图表添加标题,另一个参数是col,它将在绘制图表时使用彩虹色板。 托盘的长度应与图表中的值的数量相同。 因此,我们使用length(x)。
例
以下脚本将创建并保存当前R语言工作目录中的饼图。
# Create data for the graph.
x <- c(21, 62, 10, 53)
labels <- c("London", "New York", "Singapore", "Mumbai")
# Give the chart file a name.
png(file = "city_title_colours.jpg")
# Plot the chart with title and rainbow color pallet.
pie(x, labels, main = "City pie chart", col = rainbow(length(x)))
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
切片百分比和图表图例
我们可以通过创建其他图表变量来添加切片百分比和图表图例。
# Create data for the graph.
x <- c(21, 62, 10,53)
labels <- c("London","New York","Singapore","Mumbai")
piepercent<- round(100*x/sum(x), 1)
# Give the chart file a name.
png(file = "city_percentage_legends.jpg")
# Plot the chart.
pie(x, labels = piepercent, main = "City pie chart",col = rainbow(length(x)))
legend("topright", c("London","New York","Singapore","Mumbai"), cex = 0.8,
fill = rainbow(length(x)))
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
[图片上传中...(image-f4714e-1552624406629-1)]
3D饼图
可以使用其他软件包绘制具有3个维度的饼图。 软件包plotrix有一个名为pie3D()的函数,用于此。
# Get the library.
library(plotrix)
# Create data for the graph.
x <- c(21, 62, 10,53)
lbl <- c("London","New York","Singapore","Mumbai")
# Give the chart file a name.
png(file = "3d_pie_chart.jpg")
# Plot the chart.
pie3D(x,labels = lbl,explode = 0.1, main = "Pie Chart of Countries ")
# Save the file.
dev.off()
当我们执行上面的代码,它产生以下结果 -
7.CSV文件
在R语言中,我们可以从存储在R语言环境外的文件中读取数据。我们还可以将数据写入将被操作系统存储和访问的文件.R语言可以读取和写入各种文件格式,如CSV,EXCEL,XML等。
在本章中,我们将学习从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] "/web/com/1441086124_2016"
[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 max salary from data frame.
sal <- max(data$salary)
# 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
获取所有的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
这里列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
8.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
Loading required package: rJava
Loading required package: methods
Loading required package: xlsxjars
输入为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 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
9.二进制文件
二进制文件是包含仅以位和字节(0和1)的形式存储的信息的文件。它们不是人类可读的,因为它中的字节转换为包含许多其他不可打印字符的字符和符号。尝试使用任何文本编辑器读取二进制文件将显示如Ø和d的字符。
二进制文件必须由特定程序读取才能使用。例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式。这表示,除了人类可读的文本之外,还有更多的信息,例如字符和页码等的格式化,它们也与字母数字字符一起存储。最后一个二进制文件是一个连续的字节序列。我们在文本文件中看到的换行符是连接第一行到下一行的字符。
有时,由其他程序生成的数据需要由ř作为二进制文件处理。另外,R语言是创建可以与其他程序共享的二进制文件所必需的。
ř语言有两个函数WriteBin()和readBin()来创建和读取二进制文件。
语法
writeBin(object, con)
readBin(con, what, n )
以下是所使用的参数的描述 -
CON是读取或写入二进制文件的连接对象。
对象是要写入的二进制文件。
什么是模式,如字符,整数等表示要读取的字节。
ñ是从二进制文件读取的字节数。
例
我们考虑R语言内置数据“mtcars”。首先,我们从它创建一个csv文件,并将其转换为二进制文件,并将其存储为操作系统文件。接下来我们读取这个创建的二进制文件。
写入二进制文件
我们将数据帧“mtcars”读取为CSV文件,然后将其作为二进制文件写入操作系统。
# Read the "mtcars" data frame as a csv file and store only the columns
"cyl", "am" and "gear".
write.table(mtcars, 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("/web/com/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)
读取二进制文件
上面创建的二进制文件将所有数据存储为连续字节。因此,我们将通过选择适当的列名称值和列值来读取它。
# Create a connection object to read the file in binary mode using "rb".
read.filename <- file("/web/com/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("/web/com/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)
当我们执行上面的代码,它产生以下结果和图表 -
[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中的二进制文件得到原始数据。
10.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
由于数据现在可以作为数据帧,我们可以使用数据帧相关函数来读取和操作文件。
11.JSON文件
JSON文件以人类可读格式将数据存储为文本.Json代表JavaScript Object Notation.R可以使用rjson包读取JSON文件。
安装rjson包
在ř语言控制台中,您可以发出以下命令来安装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()函数将上面提取的数据转换为ř语言数据帧以进行进一步分析。
# 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
13.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/")
验证文件下载
运行上述代码后,您可以在当前ř语言工作目录中找到以下文件。
"JCMB_2015.csv" "JCMB_2015_Apr.csv" "JCMB_2015_Feb.csv" "JCMB_2015_Jan.csv"
"JCMB_2015_Mar.csv"
14.数据库
Sql查询。但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并数据是从它们获取记录作为数据框。一旦数据在R语言环境中可用,它就变成正常的R语言数据集,并且可以使用所有强大的包和函数来操作或分析。
在本教程中,我们将使用MySQL的作为连接到- [R语言的参考数据库。
RMySQL包
R语言有一个名为“RMySQL”的内置包,它提供与MySql数据库之间的本地连接。您可以使用以下命令在R语言环境中安装此软件包。
install.packages("RMySQL")
将ř连接到MySQL的
一旦安装了包,我们在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.frame)
当我们执行上面的代码,它产生以下结果 -
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
带过滤条件的查询
我们可以传递任何有效的选择查询来获取结果。
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的环境中被删除。
15.外部资源
以下资源包含有关R语言编程的其他信息。 请使用它们获得有关此主题的更深入的知识。
R语言编程的相关链接
R上的编程有用的书籍
16.常见面试题
什么是R语言编程?
R语言是一种用于统计分析和为此目的创建图形的编程语言。不是数据类型,它具有用于计算的数据对象。它用于数据挖掘,回归分析,概率估计等领域,使用其中可用的许多软件包。
R语言中的不同数据对象是什么?
它们是R语言中的6个数据对象。它们是向量,列表,数组,矩阵,数据框和表。
什么使R语言中的有效变量名?
有效的变量名称由字母,数字和点或下划线字符组成。变量名以字母或不以数字后跟的点开头。
数组和矩阵之间的主要区别是什么?
矩阵总是二维的,因为它只有行和列。但是阵列可以具有任何数量的维度,并且每个维度是矩阵。例如,3x3x2阵列表示维度为3x3的2个矩阵。
R语言中的哪个数据对象用于存储和处理分类数据?
R语言中的因子数据对象用于存储和处理R语言中的分类数据。
如何在R语言中加载和使用csv文件?
可以使用R语言ead.csv函数加载csv文件。 R语言在使用此函数读取csv文件时创建数据框。
如何获取R语言中当前工作目录的名称?
命令getwd()给出了R语言环境中的当前工作目录。
什么是R语言 Base包?
这是在R语言环境设置时默认加载的包。它提供了R语言环境中的基本功能,如输入/输出,算术计算等。
在逻辑回归中如何使用R语言?
逻辑回归处理测量二元响应变量的概率。在R语言中,函数glm()用于创建逻辑回归。
如何访问名为M的矩阵的第2列和第4行中的元素?
表达式M [4,2]给出了第4行和第2列的元素。
什么是向量中元素的回收?举个例子。
当在操作中涉及不同长度的两个向量时,较短向量的元素被重用以完成操作。这被称为元素循环。示例-v1 <-c(4,1,0,6)和V2 <-c(2,4),则v1 * v2给出(8,4,0,24)。重复元件2和4。
在R语言中调用函数有什么不同的方法?
我们可以用3种方式在R语言中调用一个函数。第一种方法是通过使用参数的位置来调用。第二个方法id通过使用参数的名称来调用,第三个方法是通过默认参数调用。
什么是R语言中的延迟函数评估?
函数的延迟评估意味着,只有当它在函数体内部使用时,才会评估参数。如果没有对函数体中的参数的引用,则它被简单地忽略。
如何在R语言中安装软件包?
要在R语言中安装一个包,我们使用下面的命令。
install.packages("package Name")
命名用于读取XML文件的R语言包。
名为“XML”的包用于读取和处理XML文件。
我们可以更新和删除列表中的任何元素吗?
我们可以更新任何元素,但我们只能删除列表末尾的元素。
给一般表达式在R语言中创建一个矩阵。
在R语言中创建矩阵的一般表达式是 - matrix(data,nrow,ncol,byrow,dimnames)
该函数用于在R语言中创建boxplot图形?
boxplot()函数用于在R语言中创建箱线图。它使用公式和数据框作为输入创建箱线图。
在做时间序列分析时,在ts()函数中fR语言equency = 6是什么意思?
频率6表示时间序列数据的时间间隔是每10分钟一小时。
什么是R语言中的数据重塑?
在R语言中,数据对象可以从一种形式转换为另一种形式。例如,我们可以通过合并许多列表来创建数据框。这涉及一系列R语言命令,以将数据带入新格式。这被称为数据整形。
R语言unif(4)的输出是什么?
它生成0和1之间的4个随机数。
如何获得R语言中安装的所有软件包的列表?
使用命令
installed.packages()
运行命令 - strsplit(x,“e”)是什么意思?
它将向量x中的字符串拆分为字母e位置处的子字符串。
给一个R脚本从字符串中提取大写的所有唯一字 - “快速的棕色狐狸跳过懒惰的狗”。
x <- “快速的棕色狐狸跳过懒惰的狗”
split.string <- strsplit(x,"")
extract.words <- split.string [[1]]
result <- unique(tolower(extract.words))
print(result)
向量v是c(1,2,3,4),列表x是列表(5:8),v * x [1]的输出是什么?
v * x [1]中的错误:二进制运算符的非数值参数
向量v是c(1,2,3,4),列表x是列表(5:8),v * x [[1]]的输出是什么?
[1] 5 12 21 32s
unlist()是什么?
它将列表转换为向量。
给予R语言表达式,从使用pbinom的硬币51个硬币中得到26个或更少的头。
x <- pbinom(26,51,0.5)
print(x)
X是向量c(5,9.2,3,8.51,NA),mean(x)的输出是什么?
NA
如何将JSON文件中的数据转换为数据框?
使用函数as.data.frame()
在R语言中给出一个函数,用向量的元素的和代替向量x的所有缺失值?
function(x){x [is.na(x)] <sum(x,na.rm = TRUE); x }
apply()在R语言中的用途是什么?
它用于对数组中的每个元素应用相同的函数。例如,查找每行中行的平均值。
是数组称为矩阵还是矩阵称为数组?
每个矩阵可以称为数组,但不能相反。矩阵总是二维的,但数组可以是任何维度。
如何找到缺失值的帮助页面?
?NA
如何获得向量x的标准偏差?
sd(x,na.rm = TRUE)
如何在R语言中设置当前工作目录的路径?
setwd("Path")
"%%"和"%/%"之间有什么区别?
"%%"给出第一向量与第二向量的除法的余数,而"%/%"给出第一向量与第二向量的除法的商。
col.max(x)是什么?
查找该列具有每行的最大值。
给出创建直方图的命令。
hist()
如何从R语言工作区中删除向量?
rm(x)
列出包"MASS"中可用的数据集
data(package ="MASS")
列出所有可用软件包中可用的数据集。
data(package = .packages(all.available = TRUE))
什么是命令的使用 - install.packages(file.choose(),repos = NULL)?
它用于通过浏览和选择文件从本地目录安装R语言包。
给出命令以检查元素15是否存在于向量x中。
15%在%x
给出创建散点图矩阵的语法。
pairs(formula, data)
其中公式表示成对使用的变量系列,数据表示从中获取变量的数据集。
R语言中的subset()函数和sample()函数有什么区别?
subset()函数用于选择变量和观察值。 sample()函数用于从数据集中选择大小为n的随机样本。
如何检查"m"是R语言中的矩阵数据对象?
is.matrix(m)应该重新运行TRUE。
下面的表达式all(NA == NA)的输出是什么?
[1] NA
如何获得矩阵在R语言中的转置?
函数t()用于转置矩阵。示例-t(m),其中m是矩阵。
在R语言中使用"next"语句是什么?
当我们想要跳过循环的当前迭代而不终止它时,R编程语言中的"next"语句是有用的。
下一篇:[R语言——统计应用篇](https://www.jianshu.com/p/005801fd57dc)