如何從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 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告