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 x
wordt 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