data.table通过另一个条件中的一个条件选择行

时间:2019-02-21 04:36:32

标签: r data.table

我有给定的数据表

A  B
1  2
3  4
3  2
2  1

我想选择最大A的行。如果有多个最大A的行,我将从选定的行中选择最大B的行。这里应该得到

A  B
3  4

我应该如何使用data.table实现它?

1 个答案:

答案 0 :(得分:4)

数据:

x <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
A  B
1  2
3  4
3  2
2  1")

工作代码:

library(data.table)
x[ head(order(A, B, decreasing = TRUE), n = 1), ]
#    A B
# 1: 3 4

替代方法:

x[ order(A, B, decreasing = TRUE)[1], ]

是有效的,但是在NA时会产生一行nrow(x)==0,我希望/期望0行。例如:

x[0,][ order(A, B, decreasing = TRUE)[1], ]
#     A  B
# 1: NA NA
x[0,][ head(order(A, B, decreasing = TRUE), n = 1), ]
# Empty data.table (0 rows) of 2 cols: A,B

另一个选择,我的第一个建议:

x[ order(A, B, decreasing = TRUE), ][1,]

这是完全合法的,但是正如@thelatemail建议的(谢谢!),它的效率要低得多,因为它会在给您第一行之前生成整个(重组的)框架。

还有另一种选择(在人群中,再次感谢thelatemail):

setorder(x, -A, -B)[1]