【问题标题】:Order dataset according to given list根据给定列表排序数据集
【发布时间】:2021-08-04 12:41:22
【问题描述】:

我有一个数据集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 并保持正确的顺序

【问题讨论】:

  • 函数CJ有什么作用?它来自哪个包?
  • @bird 它来自 data.table,他们只是在创建一个示例对象 dt。
  • 您尝试排序的数据集是什么?
  • 提供您要合并的第二个 data.table 对象。

标签: r sorting data.table


【解决方案1】:

你可以使用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

【讨论】:

    【解决方案2】:

    在 R 中执行此操作的标准工具是因数:

    dt[, countries := factor(countries, levels = listCountriesOrdered)]
    setorder(dt, countries)
    
    #     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
    

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 2013-10-31
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多