How to convert NA’s in sequence to a single NA in an R vector?

R ProgrammingServer Side ProgrammingProgramming

Sometimes values are missing in a sequence and R program records them as NA (Not Available). In this type of situation, we might want to replace consecutive NA records with single NA value. This can be done by using is.na along with diff function as shown in the below examples.

Example

 Live Demo

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

Output

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

Example

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

Output

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

Example

 Live Demo

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

Output

[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

Example

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

Output

[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

Example

 Live Demo

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

Output

[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

Example

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

Output

[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

Example

 Live Demo

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

Output

[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

Example

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

Output

[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

Example

 Live Demo

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

Output

[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

Example

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

Output

[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
raja
Published on 07-Dec-2020 06:18:43
Advertisements