是否有一个R函数用于根据指定条件分组减去变量中的值?

是否有一个R函数用于根据指定条件分组减去变量中的值?,r,function,dplyr,grouping,R,Function,Dplyr,Grouping,我有一个df,它采用以下一般形式: ID投票 1 65 1 85 2 100 2 20 2 95 3 50 3 60 我想创建一个新的df,它为每个ID获取投票中的两个最高值,并显示它们的差异。新的df应如下所示: ID页边距 1 20 2 5 3 10 有没有一种方法可以使用dplyr来实现这一点?一个选项是按“ID”、“投票”(在desc结尾或升序中)排列,按“ID”分组,并获得前两个“投

我有一个df,它采用以下一般形式:

ID投票
1      65
1      85
2      100
2      20
2      95
3      50
3      60
我想创建一个新的df,它为每个ID获取投票中的两个最高值,并显示它们的差异。新的df应如下所示:

ID页边距
1      20
2      5
3      10

有没有一种方法可以使用dplyr来实现这一点?

一个选项是按“ID”、“投票”(在
desc
结尾或升序中)排列
,按“ID”分组,并获得前两个“投票”的
diff

library(dplyr)
df1 %>%
    arrange(ID, desc(votes)) %>%
    group_by(ID) %>%
    summarise(margin = abs(diff(votes[1:2])))
# A tibble: 3 x 2
#     ID margin
#  <int>  <int>
#1     1     20
#2     2      5
#3     3     10

或者使用
slice
diff

df1 %>% 
   group_by(ID) %>% 
   slice(row_number(votes)[1:2]) %>% 
   summarise(margin = diff(votes))
数据
df1一个选项是
按“ID”排列
,“投票”(在
desc
结尾或升序中),按“ID”分组,并获得前两个“投票”的
diff

library(dplyr)
df1 %>%
    arrange(ID, desc(votes)) %>%
    group_by(ID) %>%
    summarise(margin = abs(diff(votes[1:2])))
# A tibble: 3 x 2
#     ID margin
#  <int>  <int>
#1     1     20
#2     2      5
#3     3     10

或者使用
slice
diff

df1 %>% 
   group_by(ID) %>% 
   slice(row_number(votes)[1:2]) %>% 
   summarise(margin = diff(votes))
数据
df1可能重复。可能重复。