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