个性化阅读
专注于IT技术分析

R中的子集数据集

无论你是在比较不同的人口统计学对营销活动的反应, 放大特定时间范围还是从库存中提取有关选定的几种产品的信息, 子集数据集都可以使你在数据集中提取有用的观察结果。 R是使子集数据容易和直观的好工具。在本教程结束时, 你将掌握从数据集中提取所需信息的专业知识。

对数据进行子集设置不会更改数据的内容, 而只是选择与你要实现的目标最相关的部分。通常, 有三种方式可以对数据集的行和列进行子集化-按索引, 按名称和按值。

按索引子集行和列

子集行和列的一种方法是通过数据集的索引。这与将行和列描述为”第一行”, “第二列和第五列中的所有行”或”第二列至第五列中的第一行”相同。让我们使用R中称为”虹膜”的数据集来指定此类短语。从其文档中, ” [他的(费舍尔或安德森氏)著名的虹膜数据集分别以厘米为单位, 分别测量了萼片的长度和宽度以及花瓣的长度和宽度, 三种鸢尾花各有50朵花, 分别是鸢尾, 杂色和初春。

要对数据进行子集化, 请在数据集对象之后使用方括号。数据集的行被指定为方括号内的第一个元素, 数据集的列被指定为第二个元素, 并用逗号分隔:

data[rows, columns]

按名称子集行和列

在R中, 数据集的行和列具有名称属性。行名很少使用, 默认情况下提供索引(整数从1到数据集的行数), 就像上一节中看到的那样。实际上, 如果你在虹膜数据集上调用rownames(), 你将看到它们只是从1索引到150:

> rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

行名称在较小的数据集中更常见, 用于使数据集中的观测值易于识别。例如, 对于包含医生患者健康信息的小型数据集, 此数据集的行名称可以是患者的全名。

另一方面, 几乎所有数据集都普遍使用列名。你可以使用colnames()函数或names()函数访问它们:

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

要通过行和列的名称对数据集进行子集化, 只需再次使用方括号(以数据集对象为前缀)即可:

重要的是要注意, 行名和列名都是字符, 因此绝对需要使用单引号或双引号!

按值细分行和列

按值对行和列进行子集设置通常可以提供最大的灵活性。例如, 你可以使用如下条件语句来提取鸢尾花的数据:

> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

条件语句(例如iris $ Species ==” setosa”)位于方括号中的row元素(即, 逗号前面的第一个元素)。除了第一个元素中的条件语句之外, 你还可以在第二个元素中按索引或名称指定列。在下面的控制台中, 尝试仅选择鸢尾花的萼片尺寸:

概括

在本教程中, 你:

  • 了解有关按索引对数据帧进行子集设置的信息。行和列的索引分别为1到行和列数的整数。
  • 了解有关按名称设置数据框的信息。你了解到很少指定行名, 并且列名是字符类型。
  • 了解如何在方括号内的row元素中使用条件语句来按值对数据框架进行子集化。
  • 了解如何结合使用这些方法以实现更灵活的子设置(例如, 对行使用条件, 对索引使用子集或对列进行子集设置)。

以下是一些练习, 可以帮助你增强所学内容。实践使完美, 因此请尝试一下!

练习练习

选择其萼片宽度大于花瓣长度的所有观测值。

选择所有杂种中萼片宽度大于平均萼片宽度的杂色鸢尾。

报告所有花瓣长度小于5厘米的鸢尾鸢尾的平均萼片宽度。

想更多地了解从数据中提取见解的其他方法吗?在srcmini上查看这些课程!

赞(0)
未经允许不得转载:srcmini » R中的子集数据集

评论 抢沙发

评论前必须登录!