如何解决如何在随机抽样中获得3个没有重复的列表? 右
我已经完成了第一步:
- 有多少人得了1分以上
- 有多少人得了3分以上
- 有多少人得6分以上
我的目标: 我需要随机抽样(没有重复的人)
- 3分以上的人
- 3分以上的人
- 有3分的人获得6分以上
我的数据集如下:
id person points
201 rt99 NA
201 rt99 3
201 rt99 2
202 kt 4
202 kt NA
202 kt NA
203 rr 4
203 rr NA
203 rr NA
204 jk 2
204 jk 2
204 jk NA
322 knm3 5
322 knm3 NA
322 knm3 3
343 kll2 2
343 kll2 1
343 kll2 5
344 kll NA
344 kll 7
344 kll 1
345 nn 7
345 nn NA
490 kk 1
490 kk NA
490 kk 2
491 ww 1
491 ww 1
489 tt 1
489 tt 1
325 ll 1
325 ll 1
325 ll NA
这就是我已经尝试编写的代码,下面是一个示例,用于查找得分超过1分的人:
persons_filtered <- dataset %>%
group_by(person) %>%
dplyr::filter(sum(points,na.rm = T)>1) %>%
distinct(person) %>%
pull()
person_filtered
more_than_1 <- sample(person_filtered,size = 3)
问题: 如何更好地编写此代码,以使我在最后的3个人列表中可以找到。 (我需要避免名单上有相同的人)
解决方法
这是一个tidyverse
解决方案,其中三个感兴趣类别的采样是同时进行的。
library(tidyverse)
dataset %>%
# Group by person
group_by(person) %>%
# Get points sum
summarize(sum_points = sum(points,na.rm = T)) %>%
# Classify the sum points into categories defined by breaks,(0-1],(1-3] ...
# I used 100 as the last value so that all sum points between 6 and Inf get classified as (6-Inf]
mutate(point_class = cut(sum_points,breaks = c(0,1,3,6,Inf))) %>%
# ungroup
ungroup() %>%
# group by point class
group_by(point_class) %>%
# Sample 3 rows per point_class
sample_n(size = 3) %>%
# Eliminate the sum_points column
select(-sum_points) %>%
# If you need this data in lists you can nest the results in the sampled_data column
nest(sampled_data= -point_class)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。