我有给定的数据表
A B
1 2
3 4
3 2
2 1
我想选择最大A的行。如果有多个最大A的行,我将从选定的行中选择最大B的行。这里应该得到
A B
3 4
我应该如何使用data.table
实现它?
答案 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]