R 中的向量应为同质数据类型。如果存在混合数据类型(例如数字和字符串),则可以使用列表作为容器。列表和数据框在 R 中密切相关。数据框可能更有用,因为它反映了我们通常收集统计数据的方式。在这篇文章中,您将了解它们。具体来说,您将了解
- R 中的列表和数据框是什么
- 如何操作列表和数据框
让我们开始吧。

R语言中列表和数据帧的简要介绍
照片由 Pine Watt 提供。部分权利保留。
概述
这篇博文分为三部分;它们是:
- R 中的列表
- R 中的数据框
- 保存和加载数据框
R 中的列表
R 中的列表非常类似于 Python 中的列表,因为任意元素都可以放入顺序容器中。例如如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> x <- list(c("Jan", "Feb", "Mar", "Apr"), c(31, 28, 31, 30, 31), 2.5, FALSE) > x [[1]] [1] "Jan" "Feb" "Mar" "Apr" [[2]] [1] 31 28 31 30 31 [[3]] [1] 2.5 [[4]] [1] FALSE |
这里列表有四个数据类型为字符、数字和逻辑的元素。要访问列表中的一个元素,您需要使用双括号语法
1 2 |
> x[[1]] [1] "Jan" "Feb" "Mar" "Apr" |
但这肯定不怎么可读,因为您一定有某种原因想把多个数据放入一个列表。您可以按如下方式构建带名称的列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
> x <- list(month=c("Jan", "Feb", "Mar", "Apr"), days=c(31, 28, 31, 30, 31), number=2.5, boolean=FALSE) > x $month [1] "Jan" "Feb" "Mar" "Apr" $days [1] 31 28 31 30 31 $number [1] 2.5 $boolean [1] FALSE > x$boolean [1] FALSE |
一旦列表带名称,您就可以使用“$
”运算符访问元素。
R 中的数据框
R 中的列表可以容纳任何内容。但是,如果列表中的每个元素都是相同长度的向量,您也可以将其制成数据框。例如如下:
1 2 3 4 5 6 7 |
> x <- data.frame(month=c("Jan", "Feb", "Mar", "Apr"), days=c(31, 28, 31, 30), foo=c(2.5, 3.1, 2.7, 5.2), bar=c(FALSE, FALSE, TRUE, FALSE)) > x month days foo bar 1 Jan 31 2.5 FALSE 2 Feb 28 3.1 FALSE 3 Mar 31 2.7 TRUE 4 Apr 30 5.2 FALSE |
如上所示,数据框就像一个数据表。因此,它期望您指定的所有列具有相同数量的行。如果您熟悉 Python 中的 pandas,您会记得 pandas 也有数据框。与 pandas 的语法类似,您也可以在 R 中筛选数据框
1 2 3 4 |
> x[x$days < 31,] month days foo bar 2 Feb 28 3.1 FALSE 4 Apr 30 5.2 FALSE |
注意末尾的逗号。这是按行筛选所必需的。
另一种语法是使用 subset()
函数
1 2 3 4 |
> subset(x, days < 31) month days foo bar 2 Feb 28 3.1 FALSE 4 Apr 30 5.2 FALSE |
当您在 subset()
函数中使用“days
”时,它被称为数据框“x
”中的一个属性。向数据框添加新列很直观,就像 pandas 一样
1 2 3 4 5 6 7 |
> x$foobar = x$foo * 2 > x month days foo bar foobar 1 Jan 31 2.5 FALSE 5.0 2 Feb 28 3.1 FALSE 6.2 3 Mar 31 2.7 TRUE 5.4 4 Apr 30 5.2 FALSE 10.4 |
但是删除列意味着您选择数据框中的其余列。R 中的 subset()
函数也可以使用
1 2 |
x <- subset(x, select=-foobar) x <- subset(x, select=-c(month, day, foo, bar)) |
您可以为 select
参数提供列名列表,或者为其提供要删除的列名的否定。
数据框中的列是一个列表。因此,您可以像修改元素一样修改列名
1 2 3 4 5 6 7 |
> colnames(x)[5] = "doubled" > x month days foo bar doubled 1 Jan 31 2.5 FALSE 5.0 2 Feb 28 3.1 FALSE 6.2 3 Mar 31 2.7 TRUE 5.4 4 Apr 30 5.2 FALSE 10.4 |
保存和加载数据框
R 中的数据框对象可以保存为文件。例如,
1 |
dump(c("x"), file="saved.txt") |
将创建一个包含变量名“x
”及其内容的文件。您可以在 dump()
函数的第一个参数中放入多个变量。要将其加载回来,请使用
1 |
source(file="saved.txt") |
这将重新创建当前空间中的变量。
另一种保存和加载方式是逐个处理对象,而不存储变量名
1 2 |
dput(x, file="saved.txt") x.restored <- dget("saved.txt") |
您将“x
”保存到文件中,并将其加载回变量“x.restored
”。
这些函数适用于通用数据对象。对于数据框,因为其具有表格结构,您可能希望将其保存为 CSV 文件,以便与其他软件(如 Excel)一起使用。将数据框保存到 CSV 的方法如下:
1 |
write.csv(iris, "irisdata.csv", row.names=FALSE) |
变量 iris
是 R 中的一个内置数据框,用于保存著名的鸢尾花数据集。输出文件 irisdata.csv 如下:
1 2 3 4 5 6 7 8 9 10 11 |
"Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species" 5.1,3.5,1.4,0.2,"setosa" 4.9,3,1.4,0.2,"setosa" 4.7,3.2,1.3,0.2,"setosa" 4.6,3.1,1.5,0.2,"setosa" 5,3.6,1.4,0.2,"setosa" 5.4,3.9,1.7,0.4,"setosa" 4.6,3.4,1.4,0.3,"setosa" 5,3.4,1.5,0.2,"setosa" 4.4,2.9,1.4,0.2,"setosa" … |
要加载回来,您使用:
1 |
iris.restored <- read.csv(“irisdata.csv”) |
进一步阅读
您可以从以下来源了解有关上述主题的更多信息:
网站
书籍
作为练习,您可以尝试:
- 将 CO2 数据框保存到 CSV 文件并加载回来,“CO2”是 R 的内置数据框
- 在一行 R 命令中,将 CO2 数据框的“conc”列提取到向量中并找到平均值(答案:435)
- 在一行 R 命令中,在 CO2 数据框中“conc”小于 200 的行中,找到“conc”的平均值(答案:135)
总结
在这篇文章中,您学习了如何处理 R 中最重要的数据对象之一,即数据框。具体来说,您学习了:
- 列表是异构数据类型的容器;您可以选择性地为每个元素分配名称。
- 数据框是列表,其中每个属性列都有相同数量的“行”。
- 您可以通过按行筛选和按列操作来操作数据框。
暂无评论。