R语言 基于组进行随机抽样

R语言 基于组进行随机抽样

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

方法1:使用plyr库

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

语法

ddply(.data, .variables, .fun = NULL)

参数 –

data – 要使用的数据框

variables – 分组参数

fun – 要应用的函数。在本例中,应用sample(nrow(x),y)方法,从ddply()方法的第二个参数中选择的变量中提取每组的y行。

例子

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

输出

[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

方法2:使用dplyr库

可以安装 “dplyr “库,并将其加载到工作空间,用于执行数据操作。这个包允许大量的方法来过滤、子集和提取基于应用约束和条件的数据。数据框架使用管道操作符进行多种操作。

group_by方法是用来根据特定列中包含的组来划分和隔离日期的。需要分组的列被指定为这个函数的一个参数。它可以包含多个列名。

语法

group_by(col1, col2, ...)

随后应用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    
<chr> <chr> 
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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程