【发布时间】:2015-09-28 00:50:42
【问题描述】:
我有一个包含 5 列的数据框和一个非常大的数据集。我想按第 3 列排序。如何对第一行之后的所有内容进行排序? (调用此函数时,我想以 nrows 结束)
示例输出:
原文:
4
7
9
6
8
新:
4
9
8
7
6
谢谢!
【问题讨论】:
我有一个包含 5 列的数据框和一个非常大的数据集。我想按第 3 列排序。如何对第一行之后的所有内容进行排序? (调用此函数时,我想以 nrows 结束)
示例输出:
原文:
4
7
9
6
8
新:
4
9
8
7
6
谢谢!
【问题讨论】:
如果我正确理解你想要做什么,这种方法应该有效:
z <- data.frame(x1 = seq(10), x2 = rep(c(2,3), 5), x3 = seq(14, 23))
zsub <- z[2:nrow(z),]
zsub <- zsub[order(-zsub[,3]),]
znew <- rbind(z[1,], zsub)
基本上,剪掉要排序的行,在第 3 列按降序对它们进行排序,然后重新附加第一行。
这是一个使用dplyr 的管道版本,因此您不会用额外的对象使工作区混乱:
library(dplyr)
z <- z %>%
slice(2:nrow(z)) %>%
arrange(-x3) %>%
rbind(slice(z, 1), .)
【讨论】:
您可以尝试使用这行代码来修改数据框df 中的第三列,如下所述:
df[,3] <- c(df[1,3],sort(df[-1,3]))
【讨论】:
df$x[-1] <- df$x[-1][order(df$x[-1], decreasing=T)]
# x
# 1 4
# 2 9
# 3 8
# 4 7
# 5 6
【讨论】: