r中的前5名和下5名使用组_by
我正在寻找一个代码或功能,分配一个值的5个最高值和5个最低值。例如,这可能来自与以下类似的数据集:r中的前5名和下5名使用组_by,r,dplyr,R,Dplyr,我正在寻找一个代码或功能,分配一个值的5个最高值和5个最低值。例如,这可能来自与以下类似的数据集: df注意:虽然我怀疑这只是样本数据,但在2010-01-31中有两个1s。这段代码解释了这一点,但如果不进行排序,输出看起来很奇怪。为此,我添加了arrange来显示它们 我在这里使用minu-rank,假设你不想要领带,总是想要前五名/后五名。另一种选择是densite\u rank,由于1的平局,它将标记2010-01-31中的前六名 库(dpyr) dat%>% 分组单位(日期)%>% 变异
df注意:虽然我怀疑这只是样本数据,但在2010-01-31
中有两个1
s。这段代码解释了这一点,但如果不进行排序,输出看起来很奇怪。为此,我添加了arrange
来显示它们
我在这里使用minu-rank
,假设你不想要领带,总是想要前五名/后五名。另一种选择是densite\u rank
,由于1
的平局,它将标记2010-01-31
中的前六名
库(dpyr)
dat%>%
分组单位(日期)%>%
变异(
R=最小秩(值),
当(
R<6~“5w”,
R>n()-5~“5b”,
真~NA_字符)
) %>%
解组()%>%
安排(日期、值)%>%
打印(n=99)
##A tible:30 x 4
#日期值rquox
#
#1 2010-01-31 11 15W
#2 2010-01-31 11 5w
#3 2010-01-31 23 5w
#4 2010-01-31 3 4 5w
#5 2010-01-31 45 5w
# 6 2010-01-31 5 6
# 7 2010-01-31 6 7
# 8 2010-01-31 7 8
# 9 2010-01-31 8 9
# 10 2010-01-31 9 10
# 11 2010-01-31 10 11
#12 2010-01-31 11 12 5b
#13 2010-01-31 12 13 5b
#14 2010-01-31 13 14 5b
#15 2010-01-31 14 15 5b
#16 2010-01-31 15 16 5b
#17 2010-02-28 21 5w
#18 2010-02-28 32 5w
#19 2010-02-28 4 3 5w
#20 2010-02-28 5 4 5w
#21 2010-02-28 6 5 5w
# 22 2010-02-28 7 6
# 23 2010-02-28 8 7
# 24 2010-02-28 9 8
# 25 2010-02-28 10 9
#26 2010-02-28 110 5b
#27 2010-02-28 1211 5b
#282010-02-2813125B
#29 2010-02-28 14 13 5b
#30 2010-02-28 15 14 5b
使用新发现的数据编辑。我推断应该忽略
NA
值,而只考虑排名靠前的值。这显示了没有10个总值行的情况,因为2010-02-28
只提供了4个5b
dat%>%
分组单位(日期)%>%
变异(
R=最小秩(值),
当(
R<6~“5w”,
R>max(R,na.rm=TRUE)-5~“5b”,
真~NA_字符)
) %>%
解组()%>%
安排(日期、值)%>%
打印(n=99)
##A tible:30 x 4
#日期值rquox
#
#1 2010-01-31 11 15W
#2 2010-01-31 11 5w
#3 2010-01-31 23 5w
#4 2010-01-31 3 4 5w
#5 2010-01-31 45 5w
# 6 2010-01-31 5 6
#7 2010-01-31 6 7 5b
#8 2010-01-31 7 8 5b
#9 2010-01-31 8 9 5b
#10 2010-01-319105B
#11 2010-01-31 15 11 5b
#12 2010-01-31不适用
#13 2010-01-31不适用
#14 2010-01-31不适用
#15 2010-01-31不适用
#16 2010-01-31不适用
#17 2010-02-28 21 5w
#18 2010-02-28 32 5w
#19 2010-02-28 4 3 5w
#20 2010-02-28 5 4 5w
#21 2010-02-28 6 5 5w
#22 2010-02-28 76 5b
#23 2010-02-28 87 5b
#24 2010-02-28 9 8 5b
#25 2010-02-28 15 9 5b
#26 2010-02-28不适用
#27 2010-02-28不适用
#28 2010-02-28不适用
#29 2010-02-28不适用
#30 2010-02-28不适用
试试这个
library(dplyr)
DF <- data.frame(Date = c(rep("2010-01-31",16), rep("2010-02-28", 14)), Value=c(rep(1:15,2)))
DF %>%
group_by(Date) %>%
mutate(n = row_number(),
nn = 1 + max(n) - n) %>%
ungroup() %>%
filter(n <= 5 | nn <= 5) %>%
mutate(v1 = if_else(n <= 5, "5b", "5w")) %>%
select(-n, -nn)
库(dplyr)
DF%
分组单位(日期)%>%
变异(n=行数(),
nn=1+最大值(n)-n]>%
解组()%>%
筛选器(n请添加您预期的输出。运行此数据时,如果值列中存在缺少的值,则此数据似乎不起作用。是否有办法解决此问题?我只能对您提供的示例数据进行操作。请更新您的示例以反映您的意思。请回答您的问题并在其中添加上下文。
# A tibble: 20 x 3
Date Value v1
<fct> <int> <chr>
1 2010-01-31 1 5b
2 2010-01-31 2 5b
3 2010-01-31 3 5b
4 2010-01-31 4 5b
5 2010-01-31 5 5b
6 2010-01-31 12 5w
7 2010-01-31 13 5w
8 2010-01-31 14 5w
9 2010-01-31 15 5w
10 2010-01-31 1 5w
11 2010-02-28 2 5b
12 2010-02-28 3 5b
13 2010-02-28 4 5b
14 2010-02-28 5 5b
15 2010-02-28 6 5b
16 2010-02-28 11 5w
17 2010-02-28 12 5w
18 2010-02-28 13 5w
19 2010-02-28 14 5w
20 2010-02-28 15 5w