R 按data.table中最高与第二高的比率进行筛选

R 按data.table中最高与第二高的比率进行筛选,r,data.table,R,Data.table,根据我的数据 library(data.table); set.seed(42) dat <- data.table(id=1:6, group=rep(1:2, each=3), value=runif(6)) > dat id group value 1: 1 1 0.9148060 2: 2 1 0.9370754 3: 3 1 0.2861395 4: 4 2 0.8304476 5: 5 2 0.641745

根据我的数据

library(data.table); set.seed(42)
dat <- data.table(id=1:6, group=rep(1:2, each=3), value=runif(6))

> dat
   id group     value
1:  1     1 0.9148060
2:  2     1 0.9370754
3:  3     1 0.2861395
4:  4     2 0.8304476
5:  5     2 0.6417455
6:  6     2 0.5190959
使用data.table,我们根据值按降序排列数据,并选择前2行大于比率的组

library(data.table)
dat[order(-value), .SD[1:2][value[1L]/value[2L] > 1.2], by = group]

#   group id        value
#1:     2  4 0.8304476261
#2:     2  5 0.6417455189
使用dplyr,我们可以根据值来排列数据帧,按组分组,过滤比率大于1.2的组,并选择前2行

library(dplyr)

dat %>%
  arrange(desc(value)) %>%
  group_by(group) %>%
  filter((value[1L]/value[2L]) > 1.2) %>%
  top_n(2)

#     id group value
#  <int> <int> <dbl>
#1     4     2 0.830
#2     5     2 0.642
使用data.table,我们根据值按降序排列数据,并选择前2行大于比率的组

library(data.table)
dat[order(-value), .SD[1:2][value[1L]/value[2L] > 1.2], by = group]

#   group id        value
#1:     2  4 0.8304476261
#2:     2  5 0.6417455189
使用dplyr,我们可以根据值来排列数据帧,按组分组,过滤比率大于1.2的组,并选择前2行

library(dplyr)

dat %>%
  arrange(desc(value)) %>%
  group_by(group) %>%
  filter((value[1L]/value[2L]) > 1.2) %>%
  top_n(2)

#     id group value
#  <int> <int> <dbl>
#1     4     2 0.830
#2     5     2 0.642

值中是否存在缺失/无限值?在我的情况下,答案不是越一般,当然对其他人越好。在值中是否存在缺失/无限值?在我的情况下,答案不是越一般,当然对其他人越好。