基于 R 中的组抽取随机样本
R 编程语言为我们提供了许多包,可以从数据对象、数据框或数据表中随机抽取样本并将它们聚合成组。
方法一:使用plyr库
“plyr”库可以安装并加载到用于执行数据操作和统计的工作空间中。 ddply() 方法应用于指定数据帧的每个子集,然后将结果组合成一个数据帧。
Syntax:
ddply( .data, .variables, .fun = NULL)
Parameter –
data – The data frame to use
variables – the grouping parameters
fun – the function to be applied. In this case, sample(nrow(x),y) method is applied which extracts y rows of each group from the variables chosen for the second parameter of ddply() method.
例子:
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 方法用于根据特定列中包含的组划分和隔离日期。所需的分组依据列被指定为该函数的参数。它可能包含多个列名。
句法:
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
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