首页 > 解决方案 > 根据给定列表排序数据集

问题描述

我有一个数据集dt,我想按照listCountriesOrdered&col按字母顺序排序

library(data.table)  
countries<- c("AT","BE","BG","DE","CY")
listCountriesOrdered <- c("BE","BG","DE","AT","CY")
col <- c("A","C","B")
dt <- CJ(countries, col)

稍后我想left_join处理值并保持正确的顺序

标签: rsortingdata.table

解决方案


你可以使用match

dt[order(match(countries,listCountriesOrdered),col)]

    countries col
 1:        BE   A
 2:        BE   B
 3:        BE   C
 4:        BG   A
 5:        BG   B
 6:        BG   C
 7:        DE   A
 8:        DE   B
 9:        DE   C
10:        AT   A
11:        AT   B
12:        AT   C
13:        CY   A
14:        CY   B
15:        CY   C

推荐阅读