habe ich eine Umfrage Daten wie folgt festgelegt:reshape Umfragedaten von Weit auf langen
df <- data.frame(
employment = 0.45,
income = 0.3,
incomeFU1 = 0.4,
married = 0.1,
employmentFU1 = 0.7,
employmentFU2 = 0.8,
incomeFU2 = 0.8,
smokingFU1 = 0.6,
smokingFU3 = 0.1,
ageFU3 = 0.9,
marriedFU2 = 0.3
)
In diesem Datensatz, Einzelpersonen über ihren Beschäftigungsstatus gefragt wurde, Einkommen usw. Die Daten auf einer aggregrate sind Stellen Sie sich dies als den Anteil aller Menschen vor, die eine Beschäftigung, ein mittleres Einkommen usw. haben. Daher hat der Datensatz nur eine Zeile.
Personen in dieser Umfrage wurden bei Baseline und 3 Follow-ups gefragt. Baseline-Variablen haben keine Endzeichenfolge, Follow-up-Antworten haben eine Endung wie "FU1" für Folge 1 und so weiter.
ich jetzt eine zweite Liste dieser Variablen:
l <- list()
l[[1]] <- c("employment", "income", "married")
l[[2]] <- c("employmentFU1", "incomeFU1", "smokingFU1")
l[[3]] <- c("employmentFU2", "incomeFU2", "marriedFU2")
l[[4]] <- c("smokingFU3", "ageFU3")
das erste Listenelement Baseline-Variablen hat, das zweite Listenelement hat Follow-up-1 Variablen hat die dritte Follow-up-2 usw.
Beachten Sie, dass einige Variablen in 2 oder 3 (manchmal sogar alle) Nachverfolgungen verfügbar sind, einige nur einmal.
Ich möchte nun diesen Datenrahmen neu zu gestalten, basierend auf den Listenvariablen zu einer Matrix oder Datenrahmen wie folgt aus:
employment income married NA NA
employmentFU1 incomeFU1 NA smokingFU1 NA
employmentFU2 incomeFU2 marriedFU2 NA NA
NA NA NA smokingFU3 ageFU3
die Anzahl der Zeilen in dieser Matrix ist die Anzahl der Listenelemente, 4 in dieser Fall.
habe ich versucht, so etwas, aber sehr weit nicht bekommen:
m <- matrix()
m[1,1] <- df[, l[[1]][1]]
m[1,2] <- l[[2]][str_detect(l[[1]][1], l[[2]])]
Sollte 'RauchenFU3' in der vierten Reihe sein (nicht drittes wie im Beispiel)? – storaged
@storaged Sie haben Recht, sorry, ich habe das korrigiert – spore234
Ich bin nur neugierig, funktioniert die Lösung unten für Sie? – storaged