纸上谈兵没有用,实战是练兵最有效的方法。本篇是习题集。做习题之前,对前面的某些内容作个小结,顺便热热身。
开胃小菜:你大可以邊用邊學啊!需要用到的先學,其它的就放一邊,只要能善用一些常用到的功能,又何必要那麼深入呢?而且您在使用當中經常會發現一些新功能,這又會馬上讓您給賺到了。–语出大家來學VIM
到目前为止,我们遇到过向量、矩阵、数据框,这些都叫做对象的类型。它们的区别和联系在哪里?
向量,vector,是最简单的对象。向量由一个或多个同类变量组成。
x <- c(1, 1, 2, 2, 3) # 生成一个向量。
is.character(x) # x 是字符型吗?
## [1] FALSE
is.numeric(x) # x 是数字型吗?
## [1] TRUE
mode(x) # 是数字型。
## [1] "numeric"
y <- c(3, 4, 4, 5, 5)
z <- c(x, y) # 多个向量并在一起。
z
## [1] 1 1 2 2 3 3 4 4 5 5
z[4] # 向量的下标。
## [1] 2
矩阵,matrix,与向量差不多,不同的是分成了行和列。
m <- matrix(c(2, 3, 1, 5), nrow = 2, ncol = 2) # 生成一个矩阵,指定行数和列数。
m
## [,1] [,2]
## [1,] 2 1
## [2,] 3 5
m <- matrix(c(2, 3, 1, 5), nrow = 2) # 生成一个矩阵,指定行数。
m
## [,1] [,2]
## [1,] 2 1
## [2,] 3 5
m <- matrix(seq(1, 20, 1), nrow = 5, byrow = TRUE) # 生成一个矩阵,指定行数,并按行排列。
m
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [4,] 13 14 15 16
## [5,] 17 18 19 20
m <- matrix(seq(1, 20, 1), nrow = 5, byrow = FALSE) # 生成一个矩阵,指定行数,并按列排列。
m[2, 2] # 矩阵的下标。
## [1] 7
数据框,dataframe,与矩阵差不多,区别在于,各列可以是不同类型。完全相当于 Excel 的表格。
a <- c(1, 2, 3, 4)
b <- seq(5, 8, by = 1)
d <- data.frame(a, b) # 生成一个数据框。
d
## a b
## 1 1 5
## 2 2 6
## 3 3 7
## 4 4 8
is.data.frame(d) # 是数据框吗?
## [1] TRUE
str(d) # 数据框的结构。
## 'data.frame': 4 obs. of 2 variables:
## $ a: num 1 2 3 4
## $ b: num 5 6 7 8
class(d)
## [1] "data.frame"
nrow(d)
## [1] 4
ncol(d)
## [1] 2
e <- c(9, 10)
f <- rbind(d, e) # 给数据框增加一行。
f
## a b
## 1 1 5
## 2 2 6
## 3 3 7
## 4 4 8
## 5 9 10
g <- c("one", "two", "three", "four", "five")
class(g)
## [1] "character"
h <- cbind(f, g) # 给数据框增加一列。
h
## a b g
## 1 1 5 one
## 2 2 6 two
## 3 3 7 three
## 4 4 8 four
## 5 9 10 five
class(h)
## [1] "data.frame"
ncol(h)
## [1] 3
colnames(h) <- c("one", "two", "three") # 更改列名称。
h
## one two three
## 1 1 5 one
## 2 2 6 two
## 3 3 7 three
## 4 4 8 four
## 5 9 10 five
下面开始习题。练习的内容主要是复习已经学过的,并提升一点点。点击这里下载练习数据。
# 练习 08.1 读入数据。
任务:读入练习数据,保存到一个叫 st_df 的对象中,并初步查看。
提示:read.csv(), file.show(), str(), summary()。
# 练习 08.2 数据类型。
任务:查看 st_df的类型。
提示:is.numeric(), is.character()... , str(), class()。
# 练习 08.3 矩阵。
任务:生成一个 5 行 6 列的矩阵,取值为整数数列 1:30。
提示:matrix(), seq()。
# 练习 08.4 矩阵与数据框。
任务:将 st_df 转换成矩阵对象 st_mt,并比较 st_df 与 st_mt 的区别。从二者选择 shoe 列。选择第 3, 4, 6, 17 行。选择除了 3, 4, 6, 17 行之外的其他行。
提示: as.matrix(), is.numeric(), mode(), st_mt[,], is.character(), class(), rownames(), %in%, !。
# 练习 08.5 作图。
任务:做图,x 为 st_df 中 shoe 一列, y 为 hand 一列,数据点用红色的原点。
任务:做图,x 为 shoe 一列, y 为 sex 一列。
提示: plot(), points(), lines(), boxplot(), par(mfrow=c(, )), ?plot
# 练习 08.6 数据框操作。
任务:给 st_df 增加一列性别所写(此处录入错误,应为“缩写”。感谢yuan网友指出错误。),列名称为 sex2,取值是 f 和 m,f 表示女性,m 表示 男性。
提示:ifelse()。
# 练习 08.7 计算。
任务:st_df 数据框中包含了多少名男生和多少名女生?
提示:table(), summary()。
任务:st_df 中的鞋号是英码,请增加一列鞋号,取值是鞋号的中国尺码。转换方法自行搜索。
提示:round()。
# 练习 08.8 因子。
任务:给st_df 增加一列 shoe_factor,取值是因子类型的鞋号。比较 shoe ~ sex 和 shoe_factor ~ sex 的箱式图。
提示:as.factor(), boxplot(), par(mfrow=c(1, 2))
# 练习 08.9 作图。
任务:做散点图,x 为鞋号,y 为身高。横坐标同时出现英码刻度和中国尺码刻度。图片保存为 pdf 文件。
提示:seq(), par(), plot(... , axes=FALSE, ...), axis(), mtext(), box(), pdf(), dev.off()。
菜鸟学 R,不必面面俱到,多练练习题,上手之后就会喜欢上 R,就有兴趣深入了解下去。
( 连载中,待续 )