2017-11-12 1 views
0

Wenn Daten, wie:Spiel data.frame auf einen Vektor

p <- c(1,2,3,4) 
x <- c(2,3,4) 
y<-c(10,20,12) 
data<-cbind(x, y) 

#  x y 
#[1,] 2 10 
#[2,] 3 20 
#[3,] 4 12 

Ich möchte x auf p entsprechen, so haben wir Ergebnis

#  x y 
#[1,] 0 0 
#[2,] 2 10 
#[3,] 3 20 
#[4,] 4 12 

Wie diese Daten als Kontrolle nach p entsprechen und 0 0 wird hinzugefügt, weil p in der ersten Zelle nicht mit der ersten Zelle von x übereinstimmt?

+3

Beginnen Sie mit 'data [match (p, data [," x "]),]' und setzen Sie dann die 'NA' auf 0. – nicola

Antwort

0

Mit der Basis R machen wir einen data.frame mit drei Spalten, x, y und p, wobei p gleich ist wie x. Dann machen wir einen weiteren data.frame, key, mit nur p. Jetzt führen wir eine Zusammenführung als eine vollständige äußere Verbindung durch, die alle Zeilen von data hält, die nicht mit key übereinstimmen. Es verbleibt ein data.frame mit drei Spalten, p, x, y, wobei x und y NA sind. Wir ersetzen die Werte durch 0 und Sie können dann optional die p-Spalte löschen.

data = data.frame(x,y,p=x) 
key = data.frame(p) 
result = merge(key,data,by="p",all=T) 
result[is.na(result)] = 0 
Verwandte Themen