在 R 中建立資料框列的樣本,排除 NA 值


要建立一個隨機樣本,排除資料框列的缺失值,我們可以使用 sample 函式和資料框列的 is.na 的否定。

例如,如果我們有一個名為 df 的資料框,其中包含一列 X,其中有一些 NA,那麼我們可以使用以下命令建立大小為 100 的 X 值的隨機樣本:

sample(df$X[!is.na(df$X)],100,replace=TRUE).

示例 1

以下是建立資料框的程式碼片段:

x<-rep(c(NA,2,5,10,15),times=4)
df1<-data.frame(x)
df1

建立了以下資料框:

By the
    x
1   NA
2    2
3    5
4   10
5   15
6   NA
7    2
8    5
9   10
10  15
11  NA
12   2
13   5
14  10
15  15
16  NA
17   2
18   5
19  10
20  15

要建立大小為 100 的 x 的隨機樣本,排除上面建立的資料框上的 NA,請將以上程式碼新增到以下程式碼段中:

x<-rep(c(NA,2,5,10,15),times=4)
df1<-data.frame(x)
sample(df1$x[!is.na(df1$x)],100,replace=TRUE)

輸出

如果將以上所有給定的程式碼段作為一個程式執行,則會生成以下輸出:

[1] 10 10 5 10 5 2 2 2 15 2 2 5 10 10 2 15 10 10 2 5 2 2 10 2
10
[26] 15 2 10 10 2 10 5 2 15 15 10 5 2 5 2 15 5 10 10 10 10 5 15 2
10
[51] 10 15 5 10 15 10 2 10 15 15 15 10 15 15 2 5 5 15 2 15 15 5 2 2
5
[76] 5 2 10 2 10 2 15 10 5 15 2 10 5 15 15 15 10 2 10 5 15 5 5 15
2

示例 2

以下程式碼片段建立了一個樣本資料框:

y<-rep(c(NA,rnorm(1),rnorm(1),rnorm(1)),times=5)
df2<-data.frame(y)
df2

建立了以下資料框:

            y
1           NA
2   -1.2548971
3    1.1956757
4    0.6556753
5           NA
6   -1.2548971
7    1.1956757
8    0.6556753
9           NA
10  -1.2548971
11   1.1956757
12   0.6556753
13          NA
14  -1.2548971
15   1.1956757
16   0.6556753
17          NA
18  -1.2548971
19   1.1956757
20   0.6556753

要建立大小為 100 的 y 的隨機樣本,排除上面建立的資料框上的 NA,請將以下程式碼新增到以上程式碼段中:

y<-rep(c(NA,rnorm(1),rnorm(1),rnorm(1)),times=5)
df2<-data.frame(y)
sample(df2$y[!is.na(df2$y)],50,replace=TRUE)

輸出

如果將以上所有給定的程式碼段作為一個程式執行,則會生成以下輸出:

[1] 0.6556753 -1.2548971 0.6556753 1.1956757 0.6556753 0.6556753
[7] -1.2548971 0.6556753 0.6556753 0.6556753 -1.2548971 1.1956757
[13] 0.6556753 -1.2548971 -1.2548971 -1.2548971 0.6556753 1.1956757
[19] -1.2548971 -1.2548971 0.6556753 -1.2548971 1.1956757 1.1956757
[25] 0.6556753 0.6556753 1.1956757 1.1956757 -1.2548971 0.6556753
[31] 0.6556753 1.1956757 0.6556753 1.1956757 0.6556753 0.6556753
[37] 0.6556753 -1.2548971 1.1956757 0.6556753 0.6556753 -1.2548971
[43] -1.2548971 0.6556753 1.1956757 0.6556753 -1.2548971 1.1956757
[49] -1.2548971 -1.2548971

示例 3

以下程式碼片段建立了一個樣本資料框:

z<-rep(c(NA,rpois(1,5),rpois(1,2),rpois(1,10),rpois(1,3)),times=4)
df3<-data.frame(z)
df3

建立了以下資料框:

  z
1  NA
2   7
3   2
4  10
5   1
6  NA
7   7
8   2
9  10
10  1
11 NA
12  7
13  2
14 10
15  1
16 NA
17  7
18  2
19 10
20  1

要建立大小為 100 的 z 的隨機樣本,排除上面建立的資料框上的 NA,請將以下程式碼新增到以上程式碼段中:

z<-rep(c(NA,rpois(1,5),rpois(1,2),rpois(1,10),rpois(1,3)),times=4)
df3<-data.frame(z)
sample(df3$z[!is.na(df3$z)],200,replace=TRUE)

輸出

如果將以上所有給定的程式碼段作為一個程式執行,則會生成以下輸出:

[1] 10 2 2 2 7 2 1 2 10 2 10 2 1 1 7 1 10 2 10 1 2 10 7 1
7
[26] 1 2 10 2 2 10 10 2 7 10 7 7 7 10 2 1 2 2 10 2 2 10 10 7
7
[51] 1 7 1 10 2 10 7 2 7 2 10 2 1 7 7 7 2 2 10 10 10 10 7 7
2
[76] 2 2 1 1 7 7 7 2 1 7 1 2 10 10 2 10 10 10 7 2 10 10 2 10
7
[101] 7 10 7 2 10 2 10 10 7 10 2 2 2 1 1 1 7 10 7 10 7 7 2 2
7
[126] 10 2 2 2 2 1 10 1 2 7 10 10 1 10 10 7 7 2 2 7 2 2 1 2
10
[151] 7 2 7 10 10 1 10 7 2 7 2 7 1 10 7 2 2 2 1 10 10 2 10 1
1
[176] 7 10 1 10 1 1 2 2 1 2 10 1 10 7 7 2 7 10 10 1 10 1 1 1
7

更新於: 2021年10月27日

214 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.