如何将在 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 次浏览

开启你的 职业生涯

通过完成课程来获得认证

开始
广告