R ning tashqi NAsini aniqlang

Ba'zi maqsadlar uchun men NA ning bir nechta NA bilan vektordan ajratib olishim kerak. Muammo shundaki, raqamlar orasida nAs mavjud va men ularni saqlashim kerak. Keyingi qadam boshqa Vektor NA bilan kesiladi va faqat birinchi vektordagi kabi bir xil pozitsiyani saqlab qoling. Mana misol:

a <- c(NA, NA, NA, NA, NA, 5,2,3,1,2,1,5,2, NA, NA, 2,3,2,NA,NA,NA)
b <- sample(1:21)

Mening chiqadigan natijalarim:

a1 <- c(5,2,3,1,2,1,5,2,NA,NA,2,3,2)
b1 <- b[6:18]

Men buni shartli loop bilan amalga oshirishim mumkin, lekin uni vektorlashtirishni xohlayman. Yordam uchun Thx!

2
qo'shib qo'ydi muallif Sotos, manba

6 javoblar

keep <- !cumprod(is.na(a)) & rev(!cumprod(is.na(rev(a))))
a[keep]
#[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2
b[Keep]

is.na returns TRUE for NA values. The cumprod function coerces the logical values to integers and returns 1 for the leading NAs and 0 for all other values. ! (negation) coerces the integer values to logical values again. We then use rev for the trailing NAs.

4
qo'shib qo'ydi
keep <- !cumprod(is.na(a)) & rev(!cumprod(is.na(rev(a))))
a[keep]
#[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2
b[Keep]

is.na returns TRUE for NA values. The cumprod function coerces the logical values to integers and returns 1 for the leading NAs and 0 for all other values. ! (negation) coerces the integer values to logical values again. We then use rev for the trailing NAs.

4
qo'shib qo'ydi

Zoo paketini ishlatish:

library(zoo)

na.trim(a)

Sharh

     

Etakchi va ta'qib etiladigan NAlarni olib tashlash uchun umumiy funktsiya.

2
qo'shib qo'ydi

Zoo paketini ishlatish:

library(zoo)

na.trim(a)

Sharh

     

Etakchi va ta'qib etiladigan NAlarni olib tashlash uchun umumiy funktsiya.

2
qo'shib qo'ydi

Birinchi va oxirgi nostandart qiymatni qidiring va vektorning bu qismini saqlang:

a1 <- a[min(which(!is.na(a))):max(which(!is.na(a)))]

> a1
[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2
2
qo'shib qo'ydi
Bu yechim aniq, ammo OP keyingi qadamini qanday amalga oshiradi? Ehtimol, siz quyidagi kabi tahrir qilishingiz kerak: p <- which (! Is.na (a)); a1 <- a [p [1]: p [uzunlik (p)]]; b1 <- b [p [1]: p [uzunlik (p)]] ?
qo'shib qo'ydi muallif Scarabee, manba

Birinchi va oxirgi nostandart qiymatni qidiring va vektorning bu qismini saqlang:

a1 <- a[min(which(!is.na(a))):max(which(!is.na(a)))]

> a1
[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2
2
qo'shib qo'ydi
Bu yechim aniq, ammo OP keyingi qadamini qanday amalga oshiradi? Ehtimol, siz quyidagi kabi tahrir qilishingiz kerak: p <- which (! Is.na (a)); a1 <- a [p [1]: p [uzunlik (p)]]; b1 <- b [p [1]: p [uzunlik (p)]] ?
qo'shib qo'ydi muallif Scarabee, manba