【发布时间】:2016-08-10 17:31:20
【问题描述】:
这是一个简短的data.table:
DT <- data.table(Tag1 = c(22,253,6219,6219,252862,252864,312786,312812),
Tag2 = c(22,255,6220,252857,252863,252865,251191,252863),
Date= as.Date(as.character(c("7/25/2008","6/15/2000","6/30/2000","9/6/2002","9/6/2002","9/6/2002","9/3/2003","9/5/2003")),format = "%m/%d/%Y"))
DT
Tag1 Tag2 Date
1: 22 22 2008-07-25
2: 253 255 2000-06-15
3: 6219 6220 2000-06-30
4: 6219 252857 2002-09-06
5: 252862 252863 2002-09-06
6: 252864 252865 2002-09-06
7: 312786 251191 2003-09-03
8: 312812 252863 2003-09-05
我想按 3 列升序对 data.table 进行排序:Tag1、Tag2 和 Date。 我测试过:
> test <- DT[order(Tag1, Tag2, Date)]
> test
Tag1 Tag2 Date
1: 22 22 2008-07-25
2: 253 255 2000-06-15
3: 6219 6220 2000-06-30
4: 6219 252857 2002-09-06
5: 252862 252863 2002-09-06
6: 252864 252865 2002-09-06
7: 312786 251191 2003-09-03
8: 312812 252863 2003-09-05
但是,我想按如下方式对 data.table 进行排序:
> test
Tag1 Tag2 Date
1: 22 22 2008-07-25
2: 253 255 2000-06-15
3: 6219 6220 2000-06-30
4: 6219 252857 2002-09-06
5: 252862 252863 2002-09-06
6: 312812 252863 2003-09-05
7: 252864 252865 2002-09-06
8: 312786 251191 2003-09-03
特别是,Tag1 或 Tag1 的重复值应该一个在另一个之下(例如:Tag1 为 6219,Tag2 为 252863)。 我该怎么做?
编辑:
建议的解决方案适用于较短的 data.table(如上面的 data.table)。 这是一个更长的版本:
DT <- data.table(Tag1 = c(252860, 252862, 312812, 252864, 252866, 252868, 252870, 318880, 252872, 252874, 252876, 252878, 252880, 252880, 252881, 252883,
252885, 252887, 311264, 252889, 252889, 252892, 318879, 318880, 318881), Tag2 = c(252861, 252863, 252863, 252865, 252867, 252869, 252871, 252871, 252873,
252875, 252877, 252879, 414611, 905593, 252882, 252884, 252886, 252888, 252888, 252890, 318904, 252893, 318878, 414547, 318882), Date = c("9/6/2002",
"9/6/2002", "9/5/2003", "9/6/2002", "9/6/2002", "9/6/2002", "9/6/2002", "10/8/2003", "9/6/2002", "9/6/2002", "9/6/2002", "9/6/2002", "10/5/2004",
"9/6/2002", "9/6/2002", "9/6/2002", "9/10/2002", "9/10/2002", "7/15/2003", "9/10/2002", "10/15/2003", "9/10/2002", "10/8/2003", "9/29/2004","10/8/2003"))
这是预期的结果(即 data.table “After”)。特别是,data.table "After" 应该遵守两个条件:
1) 行按日期升序排序
2) Tag1 或 Tag1 的重复值一个在另一个之下(最终不需要按升序排列)
Tag1 和 Tag2 的所有重复值都是黄色的。
【问题讨论】:
-
那么你可能需要破解
order。即DT[, lapply(DT, sort)] -
@Sathish 那是评论而不是答案。这就是我没有发布它的原因。
-
你使用什么样的数据需要这种分组/排序?
-
这些是带有动物耳标编号的捕获数据。
-
我不知道这个命令背后的逻辑是什么。在您想要的输出中,没有一列是有序的,而是您从一种无序状态转移到了另一种状态。
标签: r data.table