如何按因子级别进行采样,而不是R中的行索引?

时间:2017-11-29 15:05:09

标签: r dataframe sampling

如何对数据帧进行采样而不是对行指数进行采样?

具体来说,我不确定如何更改indices函数中的bs参数以选择构成因子级别的多个行,而不是仅选择单个行索引。对于上下文,我使用函数bsboot包中的boot函数来引导置信区间。

函数bs允许boot函数使用indices参数对数据框进行采样。

bs <- function(data, indices) {
  d <- data[indices,] # allows boot function to select sample 
  shares <- aggregate(d$PASVINT3W, by=list(d$Prod), FUN = sum)
  shares <- shares[1:4 , ]
  names(shares) <- c("Prod", "sum.prob")
  shares <- shares$sum.prob/sum(shares$sum.prob)
  return(shares) 
} 

然后boot实际进行抽样。

作为一个简化的例子,我有变量type1,其中每两行被分组,即1,1,2,2,3,3。我想对这些分组进行抽样,而不是单个行。

     device geslacht leeftijd type1
1       mob        0       53     1     
2       tab        1       64     1     
3        pc        1       50     2     
4       tab        0       75     2     
5       mob        1       54     3     
6        pc        1       58     3     
7        pc        1       57     4     
8        pc        0       68     4     
9        pc        0       66     5     
10      mob        0       45     5     
11      tab        1       77     6     
12      mob        1       16     6   

1 个答案:

答案 0 :(得分:2)

base R选项

lst <- split(seq_len(nrow(df1)), df1$type1)
df1[unlist(lst[sample(names(lst))]),]

或使用dplyr

library(dplyr)
df1 %>% 
   distinct(type1) %>%
   mutate(type1 = sample(type1)) %>%
   right_join(df1, .)