R按数值升序排列,然后按字符串顺序排列



我有一个非常大的数据集,我需要按年份、月份、日期列的升序排列,然后按ID列的特定顺序排列。如果我希望所有数据都按升序排列,我会这样做,但我不知道如何按特定顺序排列我的ID列。

# Create fake data:
df <- data.frame(Year = rep(2018,20),
Month = rep(1, 20),
Day = rep(seq(1:4), 5),
ID = rep(c("cat", "dog", "fish", "pie", "mango"), 4))
# Order data
df <- df %>%
data.table::setDT() %>%
data.table::setorder(c("Year", "Month", "Day"))

假设这是我需要的订单ID栏:

Desired_ID_order <- c("fish", "dog", "pie", "mango", "cat")

所以最终排序的答案是这样的:

Year Month Day    ID
1  2018     1   1  fish
2  2018     1   1   dog
3  2018     1   1   pie
4  2018     1   1 mango
5  2018     1   1   cat
6  2018     1   2  fish
7  2018     1   2   dog
8  2018     1   2   pie
9  2018     1   2 mango
10 2018     1   2   cat
11 2018     1   3  fish
12 2018     1   3   dog
13 2018     1   3   pie
14 2018     1   3 mango
15 2018     1   3   cat
16 2018     1   4  fish
17 2018     1   4   dog
18 2018     1   4   pie
19 2018     1   4 mango
20 2018     1   4   cat

谢谢!

也许这有助于

library(dplyr)
library(data.table)
df %>% 
arrange(Year, Month, rowid(match(ID, Desired_ID_order)),
match(ID, Desired_ID_order))

-输出

#   Year Month Day    ID
#1: 2018     1   1  fish
#2: 2018     1   1   dog
#3: 2018     1   1   pie
#4: 2018     1   1 mango
#5: 2018     1   1   cat
#6: 2018     1   2  fish
#7: 2018     1   2   dog
#8: 2018     1   2   pie
#9: 2018     1   2 mango
#10: 2018     1   2   cat
#11: 2018     1   3  fish
#12: 2018     1   3   dog
#13: 2018     1   3   pie
#14: 2018     1   3 mango
#15: 2018     1   3   cat
#16: 2018     1   4  fish
#17: 2018     1   4   dog
#18: 2018     1   4   pie
#19: 2018     1   4 mango
#20: 2018     1   4   cat
library(dplyr)
df %>% 
mutate(new_ID = case_when(ID == "fish" ~ 1,
ID == "dog" ~ 2,
ID == "pie" ~3,
ID == "mango" ~ 4,
ID == "cat" ~ 5)) %>% 
arrange(Year, Month, Day, new_ID) %>%
select(-new_ID)

输出:

Year Month Day    ID
1  2018     1   1  fish
2  2018     1   1   dog
3  2018     1   1   pie
4  2018     1   1 mango
5  2018     1   1   cat
6  2018     1   2  fish
7  2018     1   2   dog
8  2018     1   2   pie
9  2018     1   2 mango
10 2018     1   2   cat
11 2018     1   3  fish
12 2018     1   3   dog
13 2018     1   3   pie
14 2018     1   3 mango
15 2018     1   3   cat
16 2018     1   4  fish
17 2018     1   4   dog
18 2018     1   4   pie
19 2018     1   4 mango
20 2018     1   4   cat

相关内容

最新更新