Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中按组使用具有特定样本大小的列表,并将其应用于数据集_R_List_Sample - Fatal编程技术网

在R中按组使用具有特定样本大小的列表,并将其应用于数据集

在R中按组使用具有特定样本大小的列表,并将其应用于数据集,r,list,sample,R,List,Sample,我有一个像这样的查找文件 id department sample_size 1 accounting 2 2 finance 3 id name gender salary_in_K department 1 john M $60 accounting 2 karina F $45 accounting 3 angela F

我有一个像这样的查找文件

id   department     sample_size
1    accounting     2
2    finance        3
id  name     gender    salary_in_K department
1   john     M         $60         accounting
2   karina   F         $45         accounting
3   angela   F         $70         accounting
4   mike     M         $40         accounting
5   ken      M         $25         accounting
6   fin      M         $37         finance
7   riley    F         $58         finance
8   joe      M         $61         finance
9   dre      M         $32         finance
10  kelly    F         $85         finance
11  lisa     F         $33         finance
我有一个像这样的数据框

id   department     sample_size
1    accounting     2
2    finance        3
id  name     gender    salary_in_K department
1   john     M         $60         accounting
2   karina   F         $45         accounting
3   angela   F         $70         accounting
4   mike     M         $40         accounting
5   ken      M         $25         accounting
6   fin      M         $37         finance
7   riley    F         $58         finance
8   joe      M         $61         finance
9   dre      M         $32         finance
10  kelly    F         $85         finance
11  lisa     F         $33         finance
所以我期望的输出是5行,随机来自df,其中2行来自会计,3行来自财务

输出将包含数据帧中的所有列,但只有5行


谢谢

这里有一个tidyverse解决方案,使用dplyr、tidyr和purrr。假设查找数据帧为df1,数据为df2

我们使用嵌套将每个部门的数据存储在数据列中。然后与查找数据连接,并使用pmap为sample_n提供正确的参数,将采样数据存储在sampled中。最后,我们选择department,sampled和unnest将采样数据返回到行中

library(dplyr)
library(tidyr)
library(purrr)

set.seed(1001) # for reproducibility

df2 %>% 
  nest(data = -department) %>% 
  left_join(df1) %>% 
  mutate(sampled = pmap(list(data, sample_size), sample_n)) %>% 
  select(department, sampled) %>% 
  unnest(cols = sampled)
结果:

# A tibble: 5 x 5
  department    id name   gender salary_in_K
  <chr>      <int> <chr>  <chr>  <chr>      
1 accounting     3 angela F      $70        
2 accounting     5 ken    M      $25        
3 finance        8 joe    M      $61        
4 finance        9 dre    M      $32        
5 finance       10 kelly  F      $85
下面是data.table解决方案,df1是您的查找表,我们可以从中生成命名向量,df2是主data.frame:

图书馆数据表 setDTdf2转换为data.table df1部门id名称性别工资 >1:会计3安吉拉F$70 >2:会计5千元25元 >3:财务部8百万美元61 >4:财务9 dre M$32 >5:财务10凯利F$85 您可以按“部门”将df1查找表与df2联接,并为每个部门随机选择样本大小的行


嗨,我注意到你到目前为止已经问了11个问题,但都没有接受。请考虑接受每一个对你的案例最有效的问题的答案。每个帖子你只能接受一个答案,但你可以随意投票。你可以参考