r - 在 dplyr tidyverse 中按组对不同行数进行采样

标签 r random dplyr tidyr purrr

我想按组从数据框中采样行。但问题是,我想根据另一个表中的数据对不同数量的记录进行采样。这是我的可重现数据:

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)
)

输出应如下所示:

# 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

这是我的无效尝试

> df %>% 
+   left_join(sampleGuide, by = "Stratum") %>% 
+   group_by(Stratum) %>% 
+   sample_n(unique(Surveys))
Error in unique(Surveys) : object 'Surveys' not found

还有

> 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是一个类似的问题,但我对接受的答案不满意,因为我正在处理的实际地层数量很大。

最佳答案

purrr中的map2()解决了这个问题

df %>% 
  nest(-Stratum) %>% 
  left_join(sampleGuide, by = "Stratum") %>% 
  mutate(Sample = map2(data, Surveys, sample_n)) %>% 
  unnest(Sample)

关于r - 在 dplyr tidyverse 中按组对不同行数进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41666714/

相关文章:

r - 在带有分类变量的 r 输出中使用 lm() 的多元线性回归不完整?

调整大小 R ggplotly

r - 试图理解 R 结构 : what does a dot in function names signify?

r - 如何修复prettytable以正确显示汉字

JavaScript 颜色数组

r - 使用 dplyr 在组之间插入虚拟多个 X 行?

Mysql:从600k行中快速获取50行中的10行(其余由WHERE排除)

java - j2me随机不起作用

r - dplyr 字符串作为列引用

r - Dplyr ~ 选择一些东西,除了