R 菜鸟入门篇 第08篇 习题

纸上谈兵没有用,实战是练兵最有效的方法。本篇是习题集。做习题之前,对前面的某些内容作个小结,顺便热热身。

开胃小菜:你大可以邊用邊學啊!需要用到的先學,其它的就放一邊,只要能善用一些常用到的功能,又何必要那麼深入呢?而且您在使用當中經常會發現一些新功能,這又會馬上讓您給賺到了。–语出大家來學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)  # 数据框的结构。
## &#39;data.frame&#39;:    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,就有兴趣深入了解下去。

( 连载中,待续 )

原文链接

comments powered by Disqus