Manipulating Data - 对数据框的列重新排序

问题

你想要对一个数据框的列重新排序。

方案

# 一个样例数据框
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
    原文作者:王诗翔
    原文地址: https://www.jianshu.com/p/1f78b5929d62
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞