R学习:数据框的基本操作
R学习往期回顾
今天我们了解一下数据框的基本操作
创建数据框
我们用 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_frame
a_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(可复制)
过几天我们将更新福利,增加更多干货
万水千山总是情,点个在看行不行,哈哈哈哈哈哈哈