使用data.table [duplicate]选择组中的x最高值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用data.table [duplicate]选择组中的x最高值相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

如何在data.table中为每个组选择x最高值?

例如,我想为每个组(日期)取两个最高值(Val)。所以对于这个数据集:

Date    Name    Val
01/01/2010  A   3
01/01/2010  B   2
01/01/2010  C   1
02/01/2010  A   4
02/01/2010  B   2
02/01/2010  C   3
02/01/2010  D   1

代码应该返回:

Date    Name    Val
01/01/2010  A   3
01/01/2010  B   2
02/01/2010  A   4
02/01/2010  C   3
答案
df <- read.table(text = "Date    Name    Val
01/01/2010  A   3
                 01/01/2010  B   2
                 01/01/2010  C   1
                 02/01/2010  A   4
                 02/01/2010  B   2
                 02/01/2010  C   3
                 02/01/2010  D   1", 
                 header = TRUE, stringsAsFactors = FALSE)

setDT(df)
df[, max_val := max(Val), by = Date]
df[, max_sec := order(Val, decreasing = T)[2], by = Date]
df <- df[Val == max_val | Val == max_sec, ]
df[, c("max_val", "max_sec") := NULL]

         Date Name Val
1: 01/01/2010    A   3
2: 01/01/2010    B   2
3: 02/01/2010    A   4
4: 02/01/2010    C   3

以上是关于使用data.table [duplicate]选择组中的x最高值的主要内容,如果未能解决你的问题,请参考以下文章

从R中的data.table中删除带有NA的行[重复]

data.table 中的 dplyr::slice [重复]

包含 data.table 名称的变量已就地更改? [复制]

测试两个`data.table`是不是指向相同的内存位置[重复]

R在for循环中从data.table中提取元素[重复]

R语言中的Pandas:50题搞定 data.table