是否有一个R函数用于根据指定条件分组减去变量中的值?
我有一个df,它采用以下一般形式:是否有一个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”分组,并获得前两个“投
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可能重复。可能重复。