非常感谢你花时间帮助这个.. 我有一个名为" MyData"的数据集。如下所示:我想用A,B和C列的特定顺序对整个数据集(A到E)进行排序。顺序可以由我定义。 首先按A排序,顺序为:"黄色","绿色",然后"红色" 在A排序之后,然后按列B排序,顺序为" X"," Z"那么" Y" 在A和B排序之后,然后按C排序,顺序应该是最小数字到最小数字。
A B C D E
1 red X 0.8 aaaa 111
2 yellow Y 0.2 dddd 222
3 green X 0.3 cccc 111
4 yellow Z 0.6 dddd 333
5 green Y 0.1 aaaa 123
6 yellow X 0.5 cccc 324
7 yellow X 0.4 zzzz 222
8 yellow X 0.8 bbbb 126
以下是我想要的输出:
A B C D E
8 yellow X 0.8 bbbb 126
6 yellow X 0.5 cccc 324
7 yellow X 0.4 zzzz 222
4 yellow Z 0.6 dddd 333
2 yellow Y 0.2 dddd 222
3 green X 0.3 cccc 111
5 green Y 0.1 aaaa 123
1 red X 0.8 aaaa 111
我的实际数据集包含大约100行。 非常感谢!!! :)
答案 0 :(得分:1)
或在基地R:
df[order(
factor(df$A, levels = c("yellow", "green", "red")),
factor(df$B, levels = c("X", "Z", "Y")),
-df$C), ]
# A B C D E
#8 yellow X 0.8 bbbb 126
#6 yellow X 0.5 cccc 324
#7 yellow X 0.4 zzzz 222
#4 yellow Z 0.6 dddd 333
#2 yellow Y 0.2 dddd 222
#3 green X 0.3 cccc 111
#5 green Y 0.1 aaaa 123
#1 red X 0.8 aaaa 111
df <- read.table(text =
" A B C D E
1 red X 0.8 aaaa 111
2 yellow Y 0.2 dddd 222
3 green X 0.3 cccc 111
4 yellow Z 0.6 dddd 333
5 green Y 0.1 aaaa 123
6 yellow X 0.5 cccc 324
7 yellow X 0.4 zzzz 222
8 yellow X 0.8 bbbb 126", header = T)
答案 1 :(得分:0)
我们可以创建因子列并指定排列列的级别。最后一个mutate_if
是可选的,它只是将因子转换回字符。
library(dplyr)
dat2 <- dat %>%
mutate(A = factor(A, level = c("yellow", "green", "red")),
B = factor(B, c("X", "Z", "Y"))) %>%
arrange(A, B, desc(C)) %>%
mutate_if(is.factor, as.character)
dat2
# A B C D E
# 1 yellow X 0.8 bbbb 126
# 2 yellow X 0.5 cccc 324
# 3 yellow X 0.4 zzzz 222
# 4 yellow Z 0.6 dddd 333
# 5 yellow Y 0.2 dddd 222
# 6 green X 0.3 cccc 111
# 7 green Y 0.1 aaaa 123
# 8 red X 0.8 aaaa 111
数据强>
dat <- read.table(text = " A B C D E
1 red X 0.8 aaaa 111
2 yellow Y 0.2 dddd 222
3 green X 0.3 cccc 111
4 yellow Z 0.6 dddd 333
5 green Y 0.1 aaaa 123
6 yellow X 0.5 cccc 324
7 yellow X 0.4 zzzz 222
8 yellow X 0.8 bbbb 126",
header = TRUE, stringsAsFactors = FALSE)