NA’s zijn niet toegestaan in geabonneerde opdrachten

Ik heb een eenvoudig probleem, maar ik begreep de logica niet om het op te lossen.

Ik heb numerieke vectoren met NA’s en wil er een voorwaardeafhankelijke bewerking op toepassen.

Een eenvoudig voorbeeld dat lijkt op mijn probleem is:

x <- c(1,3,5,7,NA,2,4,6)
x[x>=5] <- c(1:8)[x>=5]
x[x<5] <- (c(1:8)*10)[x<5]

Het geeft de foutmelding “NA’s zijn niet toegestaan in gesubscripte toewijzingen”, dus ik zou graag willen weten wat daarvoor een verstandige oplossing zou zijn, aangezien het uitvoeren van elke attributie afzonderlijk werkt zoals verwacht.

Ik wil graag het verwachte resultaat hebben van:

[1]  10  20  3  4 NA  60  70  8

Bij voorkeur zonder een for-lus te hoeven maken, omdat deze bewerking al in een functie voor null-modellering zit met veel iteraties die eeuwen in beslag nemen.

Bij voorbaat dank,
Leonardo

NB. NA’s betekenen niet-beschikbare waarden


Antwoord 1, autoriteit 100%

Uw logica moet ook NA’s in de subset uitsluiten. Zie het volgende voorbeeld. Merk op dat de subsets-vectoren worden opgeslagen voordat xwordt gewijzigd.

x <- c(1,3,5,7,NA,2,4,6)
subset1 <- x>=5 & !is.na(x)
subset2 <-  x<5 & !is.na(x)
x[subset1] <- which(subset1)
x[subset2] <- 10*which(subset2)

Antwoord 2

Ik denk dat je opdracht en subscript door elkaar haalt. Ik geloof dat wat je zoekt iets dichter bij dit is:

x <- c(1,3,5,7,NA,2,4,6)
x.greater <- c(1:8)[x>=5]
x.less <- (c(1:8)*10)[x<5]
x.greater
# 3  4 NA  8
x.less
# 10 20 NA 60 70
result <- c(x.greater, x.less)
result
# 3  4 NA  8 10 20 NA 60 70

Antwoord 3

x <- c(1,3,5,7,NA,2,4,6)
x.greater <- c(1:8)*(x>=5)
# 0  0  3  4 NA  0  0  8
x.less <- c(1:8)*10*(x<5)
# 10 20  0  0 NA 60 70  0
result <- x.greater + x.less
# 10 20  3  4 NA 60 70  8

Other episodes