首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组抽样不同行数的dplyr tidyverse

按组抽样不同行数的dplyr tidyverse
EN

Stack Overflow用户
提问于 2017-01-15 21:50:38
回答 1查看 1.5K关注 0票数 5

我想一组一组地从数据帧中取样行。但这里有个问题,我想根据另一个表中的数据对不同数量的记录进行采样。这是我可复制的数据:

代码语言:javascript
复制
df <- data_frame(
  Stratum = rep(c("High","Medium","Low"), 10),
  id = c(1:30),
  Value = runif(30)
)

sampleGuide <- data_frame(
  Stratum = c("High","Medium","Low"),
  Surveys = c(3,2,5)
)

输出应该如下所示:

代码语言:javascript
复制
# A tibble: 10 × 2
   Stratum      Value
     <chr>      <dbl>
1     High 0.21504972
2     High 0.71069005
3     High 0.09286843
4   Medium 0.52553056
5   Medium 0.06682459
6      Low 0.38793128
7      Low 0.01285081
8      Low 0.87865734
9      Low 0.09100829
10     Low 0.14851919

这是我不工作的尝试

代码语言:javascript
复制
> df %>% 
+   left_join(sampleGuide, by = "Stratum") %>% 
+   group_by(Stratum) %>% 
+   sample_n(unique(Surveys))
Error in unique(Surveys) : object 'Surveys' not found

也是

代码语言:javascript
复制
> df %>% 
+   group_by(Stratum) %>% 
+   nest() %>% 
+   left_join(sampleGuide, by = "Stratum") %>% 
+   mutate(sample = map(., ~ sample_n(data, Surveys)))
Error in mutate_impl(.data, dots) : 
      Don't know how to sample from objects of class function

sample_n似乎要求size是一个单一的数字。有什么想法吗?

我只是在寻找tidyverse解决方案。purrr的额外积分!

This是一个类似的问题,但我不满意被接受的答案,因为IRL --我所处理的阶层数量很大。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-16 03:56:26

map2()purrr算出来的

代码语言:javascript
复制
df %>% 
  nest(-Stratum) %>% 
  left_join(sampleGuide, by = "Stratum") %>% 
  mutate(Sample = map2(data, Surveys, sample_n)) %>% 
  unnest(Sample)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41666714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档