Ich habe zwei Listen: eine enthält mehrere Datenrahmen mit unterschiedlicher Länge. Für jede Länge habe ich ein entsprechendes Array in einer Liste von Arrays und nun möchte ich diese Arrays als Spaltennamen auf den Vektor gleicher Länge anwenden.Übereinstimmende Vektoren von einer Liste zu Datenrahmen in einer anderen Liste nach Länge
for (i in 1:10){
assign(paste0("var",i), c(1:10))
}
df1 <- data.frame(var1,var2)
df2 <- data.frame(var3,var4,var5)
df3 <- data.frame(var6,var7,var8,var9)
df4 <- data.frame(var10)
df5 <- data.frame(var1,var2)
df6 <- data.frame(var3,var4,var5)
df7 <- data.frame(var6,var7,var8,var9)
df8 <- data.frame(var10)
my.list <- list(df1,df2,df3,df4)
names1 <- c("aa","bb")
names2 <- c("cc","dd","ee")
names3 <- c("ff","gg","hh","ii")
names4 <- c("jj")
my.list.names <- list(names1,names2,names3,names4)
for (i in 1:length(my.list)){
if (length(my.list[[i]]) == length(my.list.names))
colnames(my.list[[i]]) <- my.list.names
}
Ich kann sehen, warum meine Lösung nicht wirklich funktioniert. Ich muss nicht nur über jeden Datenrahmen in my.list, sondern auch über jeden möglichen Vektor von my.list.names gehen und dann sehen, ob sie übereinstimmen.
Ich kann nicht wirklich meinen Kopf um diese "Schleife in einer Schleife Sache" wickeln. Ich habe auch elegantere Lösungen mit angewendet. Aber ich lande am selben Punkt. Es scheint auch noch eine weitere if-Bedingung am Ende zu fehlen, aber es scheint nicht wirklich richtig zu sein, das, was ich geschrieben habe, erneut zu spezifizieren, als ob die Aussage eine Zeile früher wäre.