在单个列数据框上使用顺序

scr*_*Owl 5 sorting r dataframe

如何使用一列对data.frame进行排序?

我正在使用以下内容:

> set.seed(456)
> df1 <- data.frame(col1 = runif(10))
> class(df1)
[1] "data.frame"
> df1 <- df1[order(df1$col1),]
> class(df1)
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加一个空白列,一切正常:

> set.seed(456)
> df1 <- data.frame(col1 = runif(10))
> df1$dummy <- NA
> class(df1)
[1] "data.frame"
> df1 <- df1[order(df1$col1),]
> class(df1)
[1] "data.frame"
> df1 
         col1 dummy
7  0.08243274    NA
1  0.08955160    NA
2  0.21051232    NA
9  0.23750327    NA
8  0.28552695    NA
6  0.33195997    NA
10 0.38523617    NA
3  0.73295527    NA
5  0.78839789    NA
4  0.85213354    NA
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

akr*_*run 5

您可以添加drop=FALSE,它将适用于大多数情况。的默认选项[drop=TRUE

 df1[order(df1$col1),, drop=FALSE]
Run Code Online (Sandbox Code Playgroud)

在?`[`的帮助页面中,默认参数可以在“用法”中找到

 x[i, j, ... , drop = TRUE]
Run Code Online (Sandbox Code Playgroud)

和用于描述drop

drop:用于矩阵和数组。如果为“ TRUE”,则将结果强制为最小尺寸(请参见示例)。这仅适用于提取元素,不适用于替换。有关更多详细信息,请参见“放置”。