R学习:数据框的基本操作

R学习往期回顾

R学习:R for Data Science(一)

R学习:R for Data Science(二)

R学习:R for Data Science(三)

R学习:R for Data Science(四)

R学习:R for Data Science(五)

今天我们了解一下数据框的基本操作

创建数据框

我们用 data.frame 函数创建数据框

a_data_frame <- data.frame( x = letters[1:5], y = rnorm(5), z = runif(5) > 0.5)class(a_data_frame)## [1] "data.frame"

每列的类型可与其他列不同, 但在同一列中的元素类型必须相同。

行自动从一到五编号。如果输入的任何向量有名称, 那么行名称就取自第一个向量名称。例如, 如果 y 列有命名, 那么数据框中每行的名字将以 y 列的向量名命名

y <- rnorm(5)names(y) <- month.name[1:5]data.frame( x = letters[1:5], y = y, z = runif(5) > 0.5)

这种命名规则可通过给 data.frame 函数传入参数 row.names = NULL 覆盖掉

data.frame( x = letters[1:5], y = y, z = runif(5) > 0.5, row.names = NULL)

另外, 还可以通过给 row.names 传入一个向量来为每行命名

data.frame( x = letters[1:5], y = y, z = runif(5) > 0.5, row.names = c("Jackie", "Tito", "Jermaine", "Marlon", "Michael"))

索引数据框

可使用四种不同的向量索引(正整数、 负整数、 逻辑值和字符)
以下的命令将选择数据框中前两列的第二个和第三个元素

a_data_framea_data_frame[2:3, -3]a_data_frame[c(FALSE, TRUE, TRUE, FALSE, FALSE), c("x", "y")]

因为选择了一个以上的列, 所以得到的子集也是一个数据框。如果只选择一个列, 其结果将被简化为一个向量

class(a_data_frame[2:3, -3])## [1] "data.frame"class(a_data_frame[2:3, 1])## [1] "factor"

如果我们只需选择一个列, 那么也可以使用列表样式的索引(带有正整数或名称的双方括号, 或者带有名称的美元符号运算符)。以下命令将选择第一列中的第二个和第三个元素

a_data_frame$x[2:3]a_data_frame[[1]][2:3]a_data_frame[["x"]][2:3]

如果我们需要给列加上条件来得到一个数据框子集, 使用的语法会有点冗长, 而 subset函数能做同样的事情且更简洁。subset 需要三个参数:一个数据框, 一个行的条件逻辑向量, 以及一个需要保留的名字向量(如果最后这个参数被省略了, 那么将保留所有列)。subset 的过人之处在于它使用了特殊的估算技巧, 以避免多余的操作:你无需输入 a_data_frame$y 以访问 a_data_frame 的第 y 列, 因为它已经知道要看哪个数据框, 所以你只需键入 y。同样地, 选择列时, 你无需附上引号中列的名称, 而是可以直接键入名称。

subset(a_data_frame, y > 0 | z, x)

基本数据框操作

像矩阵一样, 数据框可使用 t 函数进行转置。但在此过程中, 所有的列(它们即将变成行)将被转换为相同的类型, 然后将变成一个矩

t(a_data_frame)

如果两个数据框的大小一致, 也可使用 cbind 和 rbind 把它们连接(join) 起来。rbind 能智能地对列重新排序以匹配。然而, 因为 cbind 不会对列名作重复性检查, 使用时要格外小心:

another_data_frame <- data.frame( # 与 a_data_frame 有相同的 cols, 不过次序不同 z = rlnorm(5), # 对数分布的数 y = sample(5), # 1 到 5 随机排列的数 x = letters[3:7])
rbind(a_data_frame, another_data_frame)
cbind(a_data_frame, another_data_frame)

当两个数据框有相同的列时, 可使用 merge 函数合并。merge 为数据库风格的连接提供了多种选择。当要连接两个数据框时, 你需要指定包含键值的列以作匹配。默认情况下,merge 函数会使用两个数据框中所有共同的列, 但通常你会想用一个共享 ID 列。在下例中, 我们将通过 by 参数指定 x 为我们所要包含的 ID:

a=merge(a_data_frame, another_data_frame, by = "x")
merge(a_data_frame, another_data_frame, by = "x", all = TRUE)

如果数据框中只包含数值, 那么 colSums 和 colMeans 函数可分别用于计算每列的总和和平均值。同样地, rowSums 和 rowMeans 将计算每一行的总和及平均值:

colSums(a_data_frame[, 2:3])
colMeans(a_data_frame[, 2:3])

小结
· 列表中的每个元素中可包含大小和类型都不同的变量。
· 列表是递归变量, 因为它可以包含其他列表。
· 使用 [ ]、 [[ ]] 或 $ 来索引列表。
· 数据框有一些类似矩阵(矩形的)和列表(不同的列可以包含不同类型的变量) 的属性。
· 数据框可以被索引, 正如矩阵或列表一样。
· merge 能让你对数据框进行类似数据库风格的连接操作。

欢迎关注公众号

另外我们的福利贴链接失效。目前新的链接回复 资源2 可得到,

目前有

1. 火山图,热图示例文件及完整代码

2. R语言学习基础知识代码

3. R语言实战(中文完整版)

4. R数据科学(中文完整版)

5. ggplot2:数据分析与图形艺术

6. 30分钟学会ggplot2

7. TCGA数据整理

8. ggplot2速查表pdf(可复制)

过几天我们将更新福利,增加更多干货

万水千山总是情,点个在看行不行,哈哈哈哈哈哈哈

(0)

相关推荐