如何將在 R 向量中連續出現的 NA 轉換成一個 NA?


有時,序列中可能存在一些缺失值,而 R 程式則將這些值記錄為 NA(不可用)。在這種情況下,我們可能希望用一個 NA 值替換連續的 NA 記錄。這可以透過使用 is.na 及 diff 函式來實現,具體如以下示例所示。

示例

 即時演示

x1<-sample(c(NA,1),20,replace=TRUE)
x1

輸出

[1] 1 1 NA 1 NA 1 NA NA 1 1 NA NA NA NA 1 NA 1 1 1 NA

示例

x1[!(is.na(x1)&diff(c(FALSE,is.na(x1)))==0)]

輸出

[1] 1 1 NA 1 NA 1 NA 1 1 NA 1 NA 1 1 1 NA

示例

 即時演示

x2<-sample(c(NA,2,3),200,replace=TRUE)
x2

輸出

[1] NA NA 2 NA 2 2 NA 3 NA NA NA 3 NA 2 NA 2 3 3 NA NA NA 3 NA NA 2
[26] 2 NA NA 3 2 3 NA 2 NA 3 2 3 2 2 3 3 NA 3 2 3 NA 3 2 2 NA
[51] NA NA NA 2 NA NA 3 2 NA 3 2 3 NA 3 3 2 NA 2 3 NA 3 2 3 2 3
[76] NA NA 2 NA 3 NA NA 3 3 2 2 2 3 NA NA 3 2 3 NA 2 2 NA NA 2 3
[101] NA NA 3 3 3 NA NA 3 2 2 2 NA NA 2 NA 3 3 NA 3 NA 2 NA NA 3 NA
[126] NA 2 3 2 3 2 NA 2 3 3 2 NA NA NA 3 2 2 2 3 NA NA 2 3 2 NA
[151] 2 NA 2 3 2 NA NA NA NA NA 3 NA 3 3 NA 3 2 2 2 2 NA 3 2 NA 2
[176] 3 3 2 3 3 NA 3 NA 2 3 3 2 2 3 2 2 2 NA NA 2 3 NA 3 NA 3

示例

x2[!(is.na(x2)&diff(c(FALSE,is.na(x2)))==0)]

輸出

[1] NA 2 NA 2 2 NA 3 NA 3 NA 2 NA 2 3 3 NA 3 NA 2 2 NA 3 2 3 NA
[26] 2 NA 3 2 3 2 2 3 3 NA 3 2 3 NA 3 2 2 NA 2 NA 3 2 NA 3 2
[51] 3 NA 3 3 2 NA 2 3 NA 3 2 3 2 3 NA 2 NA 3 NA 3 3 2 2 2 3
[76] NA 3 2 3 NA 2 2 NA 2 3 NA 3 3 3 NA 3 2 2 2 NA 2 NA 3 3 NA
[101] 3 NA 2 NA 3 NA 2 3 2 3 2 NA 2 3 3 2 NA 3 2 2 2 3 NA 2 3
[126] 2 NA 2 NA 2 3 2 NA 3 NA 3 3 NA 3 2 2 2 2 NA 3 2 NA 2 3 3
[151] 2 3 3 NA 3 NA 2 3 3 2 2 3 2 2 2 NA 2 3 NA 3 NA 3

示例

 即時演示

x3<-sample(c(5,NA),200,replace=TRUE)
x3

輸出

[1] NA NA NA NA NA NA 5 5 5 5 5 NA NA 5 NA NA NA NA 5 5 5 NA NA NA 5
[26] NA 5 NA 5 5 5 NA NA NA NA 5 NA NA NA NA 5 5 5 5 NA 5 5 5 NA 5
[51] NA NA 5 NA NA NA NA 5 5 5 5 5 5 NA NA 5 5 NA 5 5 NA NA NA 5 5
[76] 5 NA 5 NA 5 5 5 5 5 5 NA 5 5 NA 5 5 5 NA 5 5 5 NA NA NA 5
[101] 5 5 5 5 5 NA NA 5 NA NA NA 5 NA NA 5 5 5 5 5 NA NA NA 5 5 5
[126] NA 5 NA NA NA 5 5 NA NA 5 NA NA NA 5 NA NA 5 NA 5 NA NA 5 NA NA 5
[151] 5 NA 5 5 5 NA 5 5 5 NA 5 5 5 5 NA NA NA NA NA NA NA 5 NA NA 5
[176] 5 NA 5 5 5 NA 5 5 5 NA 5 NA NA 5 5 5 5 NA NA 5 NA NA NA 5 5

示例

x3[!(is.na(x3)&diff(c(FALSE,is.na(x3)))==0)]

輸出

[1] NA 5 5 5 5 5 NA 5 NA 5 5 5 NA 5 NA 5 NA 5 5 5 NA 5 NA 5 5
[26] 5 5 NA 5 5 5 NA 5 NA 5 NA 5 5 5 5 5 5 NA 5 5 NA 5 5 NA 5
[51] 5 5 NA 5 NA 5 5 5 5 5 5 NA 5 5 NA 5 5 5 NA 5 5 5 NA 5 5
[76] 5 5 5 5 NA 5 NA 5 NA 5 5 5 5 5 NA 5 5 5 NA 5 NA 5 5 NA 5
[101] NA 5 NA 5 NA 5 NA 5 NA 5 5 NA 5 5 5 NA 5 5 5 NA 5 5 5 5 NA
[126] 5 NA 5 5 NA 5 5 5 NA 5 5 5 NA 5 NA 5 5 5 5 NA 5 NA 5 5

示例

 即時演示

x4<-sample(c(499,NA,501),200,replace=TRUE)
x4

輸出

[1] NA 501 501 501 501 NA 499 NA 499 NA 501 499 499 NA NA NA 499 501
[19] 501 NA NA 499 499 501 501 499 499 501 NA NA NA 501 501 501 499 NA
[37] 501 501 499 499 499 NA NA 499 499 499 499 NA 501 501 501 NA 501 501
[55] 499 501 499 499 501 NA NA 501 501 NA 499 501 499 NA 499 501 499 NA
[73] NA 501 501 501 501 501 NA 501 499 501 499 501 499 501 NA 499 NA NA
[91] 501 NA NA 501 499 501 NA NA NA NA NA NA 499 501 501 501 NA 501
[109] NA 499 NA 501 499 NA 499 499 501 499 499 499 501 NA 501 NA NA 501
[127] NA 499 501 NA 501 501 NA NA 501 NA 499 499 499 NA NA 501 501 501
[145] 501 NA 499 NA NA 501 501 NA 501 NA NA 499 499 501 NA 501 NA NA
[163] 501 NA 499 NA 499 499 501 501 501 NA 501 501 NA NA 501 501 501 499
[181] 499 501 499 501 501 NA 501 NA 499 NA NA 499 501 NA 499 501 NA 501
[199] NA 501

示例

x4[!(is.na(x4)&diff(c(FALSE,is.na(x4)))==0)]

輸出

[1] NA 501 501 501 501 NA 499 NA 499 NA 501 499 499 NA 499 501 501 NA
[19] 499 499 501 501 499 499 501 NA 501 501 501 499 NA 501 501 499 499 499
[37] NA 499 499 499 499 NA 501 501 501 NA 501 501 499 501 499 499 501 NA
[55] 501 501 NA 499 501 499 NA 499 501 499 NA 501 501 501 501 501 NA 501
[73] 499 501 499 501 499 501 NA 499 NA 501 NA 501 499 501 NA 499 501 501
[91] 501 NA 501 NA 499 NA 501 499 NA 499 499 501 499 499 499 501 NA 501
[109] NA 501 NA 499 501 NA 501 501 NA 501 NA 499 499 499 NA 501 501 501
[127] 501 NA 499 NA 501 501 NA 501 NA 499 499 501 NA 501 NA 501 NA 499
[145] NA 499 499 501 501 501 NA 501 501 NA 501 501 501 499 499 501 499 501
[163] 501 NA 501 NA 499 NA 499 501 NA 499 501 NA 501 NA 501

示例

 即時演示

x5<-sample(c(1025,NA),100,replace=TRUE)
x5

輸出

[1] NA 1025 NA NA 1025 1025 1025 NA NA NA 1025 1025 1025 NA NA
[16] NA 1025 NA 1025 1025 1025 NA 1025 NA NA 1025 1025 1025 NA 1025
[31] 1025 1025 NA 1025 NA NA 1025 1025 1025 NA NA NA 1025 NA NA
[46] 1025 NA NA NA NA 1025 NA 1025 1025 1025 1025 NA 1025 NA 1025
[61] 1025 1025 NA NA 1025 1025 NA 1025 NA NA 1025 NA NA NA NA
[76] NA NA 1025 1025 1025 1025 1025 1025 1025 NA NA NA 1025 1025 NA
[91] NA NA 1025 NA NA 1025 NA 1025 1025 1025

示例

x5[!(is.na(x5)&diff(c(FALSE,is.na(x5)))==0)]

輸出

[1] NA 1025 NA 1025 1025 1025 NA 1025 1025 1025 NA 1025 NA 1025 1025
[16] 1025 NA 1025 NA 1025 1025 1025 NA 1025 1025 1025 NA 1025 NA 1025
[31] 1025 1025 NA 1025 NA 1025 NA 1025 NA 1025 1025 1025 1025 NA 1025
[46] NA 1025 1025 1025 NA 1025 1025 NA 1025 NA 1025 NA 1025 1025 1025
[61] 1025 1025 1025 1025 NA 1025 1025 NA 1025 NA 1025 NA 1025 1025 1025

更新於: 2020 年 12 月 7 日

84 次瀏覽

開啟你的 職業生涯

透過完成課程來獲得認證

開始
廣告
© . All rights reserved.