2 min read

Steem 和 R 语言:跟大鹏学 R 语言(9)选取单元格

原文链接: steemit, cnsteem, busy, chainbb, steemdb, steemd, busy, markdown

前情回顾:

本文选自《学 R:零基础学习 R 语言》(研究出版社,大鹏、李怡著,2018)第二章,有改动。

如果我们想看看数据框里某个指定值,比如1995年9月二氧化碳的浓度,该怎么选取单元格呢?你还记得上一节我们是如何选取 4 月的降水量吗?x[4]。类似地,1995年是第37行,9月是第10列,所以:

mydata2[37, 10]
## [1] 358.11

要选取多个行呢?若你还记得用c()生成一个向量,那就好办了,比如选取第10列的全部偶数行:

mydata2[c(2,4,6,8,10,12,14,16,18,20,
          22,24,26,28,30,32,34,36,38), 10]
##  [1] 314.00 316.11 316.54 318.48 320.18 322.93 324.68 327.27
##  [9] 329.14 332.60 335.72 337.81 340.90 344.68 348.55 350.82
## [17] 352.94 355.84 359.51

行数太多,逐个敲起来太麻烦了吧,高效人士的办法是用seq()函数生成个数列:

mydata2[seq(from = 2, to = 39, by = 2), 10]
##  [1] 314.00 316.11 316.54 318.48 320.18 322.93 324.68 327.27
##  [9] 329.14 332.60 335.72 337.81 340.90 344.68 348.55 350.82
## [17] 352.94 355.84 359.51

seq(from = 2, to = 39, by = 2) 表示以 2 为起点,39 为终点,间隔(即步长)为 2 生成一个数列。比如步长是1的话,就用seq(from = 2, to = 39, by = 1),等同于2:39

mydata2[2:39, 10]
##  [1] 314.00 314.83 316.11 316.05 316.54 317.66 318.48 319.10
##  [9] 320.18 322.22 322.93 323.20 324.68 327.35 327.27 328.40
## [17] 329.14 331.42 332.60 333.75 335.72 336.52 337.81 339.69
## [25] 340.90 342.92 344.68 346.27 348.55 349.64 350.82 352.05
## [33] 352.94 353.67 355.84 358.11 359.51 360.24

如果是选取整行或整列的话, 为了省事儿,可以空出来相应位置:

mydata2[, 10]  # 第10列全部。
##  [1] 313.68 314.00 314.83 316.11 316.05 316.54 317.66 318.48
##  [9] 319.10 320.18 322.22 322.93 323.20 324.68 327.35 327.27
## [17] 328.40 329.14 331.42 332.60 333.75 335.72 336.52 337.81
## [25] 339.69 340.90 342.92 344.68 346.27 348.55 349.64 350.82
## [33] 352.05 352.94 353.67 355.84 358.11 359.51 360.24
mydata2[37, ]  # 第37行全部。
##       X    Jan    Feb    Mar    Apr    May   Jun    Jul
## 37 1995 359.98 361.03 361.66 363.48 363.82 363.3 361.94
##      Aug    Sep   Oct    Nov    Dec
## 37 359.5 358.11 357.8 359.61 360.74

如果列数太多,总不能老去数第几列吧?别急,也可以用行或列名称来替代列数:

mydata2[, 'Sep']
##  [1] 313.68 314.00 314.83 316.11 316.05 316.54 317.66 318.48
##  [9] 319.10 320.18 322.22 322.93 323.20 324.68 327.35 327.27
## [17] 328.40 329.14 331.42 332.60 333.75 335.72 336.52 337.81
## [25] 339.69 340.90 342.92 344.68 346.27 348.55 349.64 350.82
## [33] 352.05 352.94 353.67 355.84 358.11 359.51 360.24

或者用美元符号后面跟着列的名称:

mydata2$Sep
##  [1] 313.68 314.00 314.83 316.11 316.05 316.54 317.66 318.48
##  [9] 319.10 320.18 322.22 322.93 323.20 324.68 327.35 327.27
## [17] 328.40 329.14 331.42 332.60 333.75 335.72 336.52 337.81
## [25] 339.69 340.90 342.92 344.68 346.27 348.55 349.64 350.82
## [33] 352.05 352.94 353.67 355.84 358.11 359.51 360.24