如何从R数据框中,针对特定列值的特定百分比的行创建随机样本?


随机抽样是数据分析的重要组成部分,大多数情况下我们需要基于行而不是列创建随机样本,因为行代表案例。为了从R数据框中针对特定列值的特定百分比的行创建随机样本,我们可以使用哪个函数的sample函数?

考虑以下数据框:

示例

 在线演示

set.seed(887)
grp<-sample(LETTERS[1:4],20,replace=TRUE) Score<-sample(101:150,20)
df1<-data.frame(grp,Score)
df1

输出

grp Score
1 D 135
2 D 114
3 C 121
4 C 150
5 B 129
6 A 110
7 D 126
8 D 132
9 C 118
10 D 102
11 B 103
12 D 145
13 A 128
14 C 147
15 B 106
16 B 125
17 D 130
18 B 131
19 A 142
20 C 143

基于grp列的A,随机抽取50%的行:

示例

df1[sample(which(df1$grp=='A'),round(0.5*length(which(df1$grp=='A')))),]

输出

grp Score 2 A 138 20 A 125

让我们来看另一个例子:

示例

 在线演示

y1<-sample(c("YT1","YT2","YT3"),20,replace=TRUE)
y2<-rnorm(20,10,1) df2<-data.frame(y1,y2)
df2

输出

y1 y2
1 YT2 10.886273
2 YT1 9.534332
3 YT1 8.353436
4 YT1 10.878407
5 YT2 9.881384
6 YT2 9.825197
7 YT3 8.805524
8 YT3 10.189767
9 YT1 11.615293
10 YT1 10.194561
11 YT3 10.317023
12 YT1 11.570260
13 YT1 9.488106
14 YT2 10.340876
15 YT2 7.425779
16 YT2 10.085891
17 YT1 11.023932
18 YT2 10.301987
19 YT3 10.234140
20 YT1 9.048794

基于y1列的YT1,随机抽取30%的行:

示例

df2[sample(which(df2$y1=='YT1'),round(0.3*length(which(df2$y1=='YT1')))),]

输出

    y1     y2
2  YT1 10.400617
13 YT1 8.977768

更新于:2020-10-14

815 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告