如果满足下面的规则,数据帧可被简单地看成列表。
● 所有组件都是向量,无论是逻辑向量、数值向量,还是字符向量(甚至可以是混合向量)。
● 所有向量的长度都相同。
根据上述规则,我们可以得出这样的推断,即可以将数据帧想象成一个表,该表一般有一定数量的列(以组成这些列的向量来表示)和一定数量的行(行的数量与向量的长度一致),如图1-10所示。虽然要遵守上述两条规则,但是规则中并没有对列的类型做出限制,即数据帧中多个列的类型可以是不同的,例如数据帧中可以存在数值类型和布尔类型的列。
图1-10
可以想象,数据帧是一种非常方便的数据存储方式,特别适用于存储结构化的数据集,如实验观察数据或金融交易数据。数据帧允许在每一行中存储观察数据,并在每一列中存储给定观察数据的属性。在后文中,读者将会更深入地理解数据帧。
虽然数据帧是列表的逻辑子集,但是它具有创建和处理数据帧的整套专用函数。
创建一个数据帧类似于创建一个列表,只不过使用的函数有所不同。同样,创建数据帧的函数被简单地命名为data.frame(),示例如下:
a_data_frame <- data.frame(first_attribute =c("alpha","beta"," gamma"),second_attribute = c(14,20,11))
请注意:对于每一个向量(即每一列),将运算符“=”之前的字符作为列的名称。另外,还需要注意以下两点。
● 如果不给向量指定名称,那么向量就会被随机地赋予一个难记且非常不友好的名称,在上述示例中,第一个向量会被命名为“c..alpha....beta....gamma..”,而第二个向量会被命名为“c.14..20..11..”。所以,强烈建议读者在创建数据帧时,给向量指定名称。
● 可以指定包含空格的列名,如将第一个向量的名称改为“first attribute”(取代原来的first_attribute),这时只需要在名称上添加双引号即可,示例如下:
a_data_frame <- data.frame("first attribute" ...)
实际上,并不推荐第二种指定包含空格的列名的做法,因为在后续的代码中再次使用这个向量时,该做法会让事情变得复杂,从而引发很多令人烦恼的后果。
那么,如何选择并展示数据帧的一列呢?答案是使用符号“$”,具体如下:
a_data_frame$second_attribute [1] 14 20 11
可以用类似的方法向数据帧中添加一列:
a_data_frame$third_attribute <- c(TRUE,FALSE,FALSE)