2016-04-08 13 views
0

Ich bin neu in R und hier und ich brauche etwas Hilfe, um meine Daten zu strukturieren.R: Entsprechender Wert von einem anderen Datenrahmen

Ich habe zwei Datensätze: Einer von ihnen ist ein lang-Format innerhalb von vorgegebenen Themen Daten, die groß ist und sieht ein bisschen wie folgt aus:

long.format <- data.frame(subject.no = c(1, 1, 1, 1, 2, 2, 2, 2), condition = c("prime", "prime", "prime", "prime", "control", "control","control","control"), response = c(1,1,1,0,1,1,1,0)) 

    subject.no condition response 
>1   1  prime  1 
>2   1  prime  1 
>3   1  prime  1 
>4   1  prime  0 
>5   2 control  1 
>6   2 control  1 
>7   2 control  1 
>8   2 control  0 

Der andere ist bereits im Wide-Format und Aussehen wie diese

wide.format <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f")) 

    subject age gender 
>1  1 26  m 
>2  2 27  f 

Das einzige, was ich jetzt tun möchte, ist der Wert in „Zustand“ (und nur diese!) aus dem langen Formatdatenrahmen zu dem entsprechenden Thema in der breiten Datenrahmen zu erhalten, indem eine Zugabe neue Spalte im breiten Datenrahmen (durch Verwendung der Spalten subject.no und Thema, jeweils).

So ist der letzte Datenrahmen sollte wie folgt aussehen:

wide.format.aim <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f"), condition = c("prime","control")) 

     subject age gender condition 
>1  1 26  m  prime 
>2  2 27  f control 

Ich habe versucht, Zusammenführung aber mit einem langen Formatdatenrahmen mit den Informationen aus dem Breitformat-Datenrahmen hinzugefügt gelandet ... aber ich will es andersrum ...

Dies ist, was ich versucht habe:

test.it <- merge(x=wide.format, y=long.format[,c("subject.no", "condition")], all.x=T, by.x="subject", by.y="subject.no") 

Irgendwelche Vorschläge?

Vielen Dank im Voraus!

+0

habe ich versucht, Zusammenführung (sorry dies mit den realen Variablennamen ist) Test. it <- fusionieren (x = daten.values, y = daten [, c ("subjekt_nr", "Bedingung")], all.x = T, by.x = "vp.list", by.y = "subject_nr ") - aber das hat nicht funktioniert (wenn du magst, kann ich erklären, was in mehr Worten passiert ist ...) – Mathias

+0

in Ordnung! hoffe, das ist jetzt einfach zu verstehen – Mathias

Antwort

0

Sie sind daran interessiert, die einzigartigen Werte von long.format[,c("subject.no", "condition")] Fusion:

unique(long.format[,c("subject.no", "condition")]) 
# subject.no condition 
#1   1  prime 
#5   2 control 

Sie fusionieren können diese Werte mit

merge(x = wide.format, 
     y = unique(long.format[,c("subject.no", "condition")]), 
     by.x = "subject", 
     by.y = "subject.no") 
# subject age gender condition 
#1  1 26  m  prime 
#2  2 27  f control 
+0

so ist es nur ein einfaches Wort "unique()" am richtigen Ort ... Es hat funktioniert, also vielen Dank! – Mathias

+0

@Mathias Sie hätten auch einen 'unique()' um Ihren vorhandenen Code herum werfen können, aber es scheint effizienter zu sein, in der eindeutigen Teilmenge zu verschmelzen als zuerst zu fusionieren und dann Duplikate herauszufiltern. – Jota

Verwandte Themen