📜  基于 R 中的组抽取随机样本

📅  最后修改于: 2022-05-13 01:54:26.104000             🧑  作者: Mango

基于 R 中的组抽取随机样本

R 编程语言为我们提供了许多包,可以从数据对象、数据框或数据表中随机抽取样本并将它们聚合成组。

方法一:使用plyr库

“plyr”库可以安装并加载到用于执行数据操作和统计的工作空间中。 ddply() 方法应用于指定数据帧的每个子集,然后将结果组合成一个数据帧。

例子:

R
# importing required libraries
library("plyr")
  
# create dataframe
data_frame<-data.frame(col1=c(rep('G1',50),rep('G2',50),rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- ddply(data_frame,.(col1),function(x) x[sample(nrow(x),5),])
print("Modified DataFrame")
print (data_mod)


R
# importing required libraries
library("dplyr")
  
# create dataframe
data_frame<-data.frame(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame %>% group_by(col1) %>% sample_n(3)
print("Modified DataFrame")
print (data_mod)


R
# importing required libraries
library("data.table")
  
# create dataframe
data_frame<-data.table(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame[, .SD[sample(x = .N, size = 5)], by = col1]
print("Modified DataFrame")
print (data_mod)


输出

[1] "Original DataFrame" 
  col1 col2 
1   G1    a 
2   G1    b 
3   G1    c 
4   G1    d 
5   G1    e 
6   G1    a 
[1] "Modified DataFrame" 
   col1 col2 
1    G1    d 
2    G1    e 
3    G1    d 
4    G1    a 
5    G1    a 
6    G2    b 
7    G2    c 
8    G2    d 
9    G2    d 
10   G2    e 
11   G3    c 
12   G3    e 
13   G3    b 
14   G3    b 
15   G3    d

方法二:使用dplyr库

可以安装“dplyr”库并将其加载到用于执行数据操作的工作空间中。该软件包允许使用多种方法根据约束和条件的应用来过滤、子集和提取数据。使用管道运算符对数据帧进行多次操作。

group_by 方法用于根据特定列中包含的组划分和隔离日期。所需的分组依据列被指定为该函数的参数。它可能包含多个列名。



句法:

接着应用 sample_n() 方法从数据框中选择随机行,参数指示从每组中采样的行数。

例子:

电阻

# importing required libraries
library("dplyr")
  
# create dataframe
data_frame<-data.frame(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame %>% group_by(col1) %>% sample_n(3)
print("Modified DataFrame")
print (data_mod)

输出

[1] "Original DataFrame" 
  col1 col2 
1   G1    a 
2   G1    b 
3   G1    c 
4   G1    d 
5   G1    e 
6   G1    a 
[1] "Modified DataFrame" 
# A tibble: 9 x 2 
# Groups:   col1 [3]   
 col1  col2    
  
1 G1    d     
2 G1    e     
3 G1    c     
4 G2    a     
5 G2    a     
6 G2    c     
7 G3    b     
8 G3    a     
9 G3    a 

方法 3:使用 data.table

库 data.table 可用于快速聚合组织成表格结构的大数据。可以将包加载并安装到工作空间中。

数据表的索引可以使用 .SD 参数执行,该参数使用“by”参数选择样本分组数据。从每个组中选择的行数取决于索引方法中指定的大小属性。输出以 data.table 的形式返回。

句法:

data_frame[ , .SD[sample(x = .N, size = n)], by = ]

例子:

电阻

# importing required libraries
library("data.table")
  
# create dataframe
data_frame<-data.table(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame[, .SD[sample(x = .N, size = 5)], by = col1]
print("Modified DataFrame")
print (data_mod)

输出

[1] "Original DataFrame" 
col1 col2 
1:   G1    a 
2:   G1    b 
3:   G1    c 
4:   G1    d 
5:   G1    e 
6:   G1    a 
[1] "Modified DataFrame" 
col1 col2  
1:   G1    a  
2:   G1    e  
3:   G1    d  
4:   G1    e  
5:   G1    a  
6:   G2    c  
7:   G2    c  
8:   G2    c  
9:   G2    d 
10:   G2    e 
11:   G3    b 
12:   G3    e 
13:   G3    d 
14:   G3    d 
15:   G3    d