Angenommen, ich habe einen Datensatz mit 2 Variablen, a und b, wobei alle b's a sind, aber nicht alle a's sind b's.Neue Variable mit for-Schleife und if-Anweisungen in R
a<-rbind(1,1,1,1,1)
b<-rbind(0,0,0,1,1)
d<-cbind(a,b)
d
[,1] [,2]
[1,] 1 0
[2,] 1 0
[3,] 1 0
[4,] 1 1
[5,] 1 1
Ich möchte eine neue dritte Variable erstellen, um diese Informationen in einem einzigen Datenrahmen zu verdichten. Ich habe versucht, so zu tun, indem eine Schleife 1 in nrows schreiben, wenn die eine Variable 1 dann eine 2 schreiben, und wenn die b Variable 1 ist dann ein 1
e<- for (i in 1:nrow(d)) {
if (d[,1]==1) {
e$new[,i] <- 2
} # end if 1
else (d[,2]==1)
e$new[,i]<-1
} # end for 2
} # end for
schreiben möchte ich im Grunde die Ausgabe aussehen als solche:
> d
[,1] [,2] [,3]
[1,] 1 0 2
[2,] 1 0 2
[3,] 1 0 2
[4,] 1 1 1
[5,] 1 1 1
ich erhalte eine Fehlermeldung: Fehler bei e $ new [i] <-0: falsche Anzahl der Indizes auf Matrix Zusätzlich: Warnmeldungen: 1: in 1: x: numerischer Ausdruck hat 2 Elemente: nur das zuerst verwendete 2: In wenn (d [, 1] == 1) {: die Bedingung ha s length> 1 und nur das erste Element wird verwendet
Jede Hilfe zum Debuggen des Skripts wäre willkommen!
Es gibt zwei Probleme so weit in Ihrem Code zu verwenden, wie ich sehen kann. Erstens können Sie keine Variable verwenden, ohne sie zu definieren, hier die Variable "e". Zweitens ist e $ new bereits eine Liste/ein Vektor, auf dessen Element Sie nicht zugreifen sollten durch '[, i]', '[i]' sollte ausreichen. – Psidom
'c (2,1) [d [, 1] + d [, 2]]' funktioniert auch mit ein wenig kreativer Indizierung. – thelatemail
Danke für die Hilfe! Also, @Psidom Ich muss nur das "e" -Objekt mit "e <- NULL" initialisieren? –