Sto provando a calcolare diverse nuove variabili nel mio dataframe. Prendere valori iniziali per esempio:Lapply in un dataframe su diverse variabili utilizzando i filtri
Dire che ho:
Dataset <- data.frame(time=rep(c(1990:1992),2),
geo=c(rep("AT",3),rep("DE",3)),var1=c(1:6), var2=c(7:12))
time geo var1 var2
1 1990 AT 1 7
2 1991 AT 2 8
3 1992 AT 3 9
4 1990 DE 4 10
5 1991 DE 5 11
6 1992 DE 6 12
E voglio:
time geo var1 var2 var1_1990 var1_1991 var2_1990 var2_1991
1 1990 AT 1 7 1 2 7 8
2 1991 AT 2 8 1 2 7 8
3 1992 AT 3 9 1 2 7 8
4 1990 DE 4 10 4 5 10 11
5 1991 DE 5 11 4 5 10 11
6 1992 DE 6 12 4 5 10 11
Così sia il tempo e la variabile stanno cambiando per le nuove variabili. Ecco il mio tentativo:
intitialyears <- c(1990,1991)
intitialvars <- c("var1", "var2")
# ideally, I want code where I only have to change these two vectors
# and where it's possible to change their dimensions
for (i in initialyears){
lapply(initialvars,function(x){
rep(Dataset[time==i,x],each=length(unique(Dataset$time)))
})}
Che funziona senza errori ma non produce nulla. Vorrei assegnare i nomi delle variabili nell'esempio (ad esempio "var1_1990") e rendere immediatamente le nuove variabili parte del dataframe. Vorrei anche evitare il ciclo for, ma non so come avvolgere due lappie attorno a questa funzione. Dovrei preferire che la funzione usi due argomenti? Il problema è che la funzione apply non porta i risultati nel mio ambiente? Sono stato bloccato qui per un po 'quindi sarei grato per qualsiasi aiuto!
ps: ho la soluzione per fare questa combinazione per combinazione, senza applicare e del calibro, ma sto cercando di allontanarsi da copia e incolla:
Dataset$var1_1990 <- c(rep(Dataset$var1[which(Dataset$time==1990)],
each=length(unique(Dataset$time))))