6.13 对数据框的列重新排序
6.13.1 问题
你想要对一个数据框的列重新排序。
6.13.2 方案
# 一个样例数据框
data <- read.table(header = TRUE, text = "
id weight size
1 20 small
2 27 large
3 24 medium
")
# 根据列名数字排序
data[c(1, 3, 2)]
#> id size weight
#> 1 1 small 20
#> 2 2 large 27
#> 3 3 medium 24
# 如果你想要实际改变 `data`,需要把它重新赋值回 `data`
# 符号: data <- data[c(1,3,2)]
# 根据列名重新排序
data[c("size", "id", "weight")]
#> size id weight
#> 1 small 1 20
#> 2 large 2 27
#> 3 medium 3 24
上面例子中对数据框进行索引是将数据框作为一个列表(一个数据框实际上就是向量列表)。你也可以使用矩阵形式的索引方式:
data[, c(1, 3, 2)]
#> id size weight
#> 1 1 small 20
#> 2 2 large 27
#> 3 3 medium 24
矩阵形式索引的缺点在于当你只指定一列时结果会不同。下面例子中,返回的结果对象是一个向量而不是数据框。因为返回的数据类型并不能总是与矩阵索引保持一致,所以通常使用列表形式进行索引更为安全,或者在矩阵索引形式中指定 drop=FALSE
选项:
# 列表形式的索引
data[2]
#> weight
#> 1 20
#> 2 27
#> 3 24
# 矩阵形式的索引——降维会变为一个向量
data[, 2]
#> [1] 20 27 24
# 矩阵形式的索引,指定 drop=FALSE
# ——保留维度以保存数据框形式
data[, 2, drop = FALSE]
#> weight
#> 1 20
#> 2 27
#> 3 24