I-Datenrahmenden gleichen Wert für jede Gruppe in R
ID <- c(1,1,2,2,2,3,3)
x <- c("1st","","1st","1st","","","")
y <- c("2nd","2nd","","","","2nd","2nd")
z <- c("","","3rd","3rd","","","3rd")
df <- data.frame(ID,x,y,z)
df
ID x y z
1 1 1st 2nd
2 1 2nd
3 2 1st 3rd
4 2 1st 3rd
5 2
6 3 2nd
7 3 2nd 3rd
haben Ich möchte den gleichen Wert von ID füllen, die Ausgabe
ID x y z x1 y1 z1
1 1 1st 2nd 1st 2nd
2 1 2nd 1st 2nd
3 2 1st 3rd 1st 3rd
4 2 1st 3rd 1st 3rd
5 2 1st 3rd
6 3 2nd 2nd 3rd
7 3 2nd 3rd 2nd 3rd
Wenn die ID 1 1. haben, neu Variable x1 werden alle „ersten“ für ID1 haben, und so weiter Daten aktualisieren, wenn ich mehr Variablen, aber ich brauche nur x zu verwenden, y, z
ID <- c(1,1,2,2,2,3,3)
x <- c("1st","","1st","1st","","","")
y <- c("2nd","2nd","","","","2nd","2nd")
z <- c("","","3rd","3rd","","","3rd")
m <- c(10:16)
n <- c(20:26)
df <- data.frame(ID,x,y,z,m,n)
Mit data.table können Sie tun 'Bibliothek (data.table); setDT (df) [, setdiff (Namen (df), "ID"): = lapply (.SD, Funktion (x) x [x! = ""] [1L]), mit = ID] 'Dies füllt auch die Leerzeichen mit 'NA', was dort wie das" Richtige "aussieht. – Frank
@Frank, wie wir Original x, y, z behalten, weil die Ausgabe x, y, z sind die gleichen x1, y1, z1 – BIN
Anstelle von 'setdiff (Namen (df)," ID ")', schreiben 'paste0 (setdiff (Namen (df), "ID"), ".new") oder ähnlich. Auf der linken Seite von ': =' stehen die neuen Var-Namen. – Frank