7
votes

Dans une source de données sur différentes variables utilisant des filtres

J'essaie de calculer plusieurs nouvelles variables dans mon Dataframe. Prenez les valeurs initiales par exemple:

Dites que j'ai: xxx

et je veux: xxx

donc et la variable change pour les nouvelles variables. Voici ma tentative: xxx

qui fonctionne sans erreur mais ne produit rien. Je voudrais affecter les noms de variables dans l'exemple (par exemple. "VAR1_1990") et apporter immédiatement la nouvelle variables faisant partie du Dataframe. Je voudrais aussi éviter la boucle pour la boucle, mais je ne sais pas comment envelopper deux acadrés autour de cette fonction. Devrais-je plutôt avoir la fonction utiliser deux arguments? Le problème est-il que la fonction d'application ne porte pas les résultats dans mon environnement? J'ai été coincé ici pendant un moment, alors je serais reconnaissant de toute aide!

PS: J'ai la solution pour faire cette combinaison par combinaison sans appliquer et les goûts mais j'essaie de m'éloigner de la copie et de la pâte: xxx


0 commentaires

3 Réponses :


4
votes

Ceci peut être fait avec sous-ensemble () , remodèle () et fusion () : xxx

La commande de colonne n'est pas exactement ce que vous avez dans votre question, mais vous pouvez corriger cela après le fait avec une opération d'index, si nécessaire.


0 commentaires

1
votes

avec dplyr et titsy et à l'aide d'une fonction personnalisée, essayez ce qui suit:

Data xxx

code xxx


0 commentaires

2
votes

Voici un datable.table code> méthode:

require(data.table)
dt <- as.data.table(Dataset)
in_cols = c("var1", "var2")
out_cols = do.call("paste", c(CJ(in_cols, unique(dt$time)), sep="_"))

dt[, (out_cols) := unlist(lapply(.SD, as.list), FALSE), by=geo, .SDcols=in_cols]

#    time geo var1 var2 var1_1990 var1_1991 var1_1992 var2_1990 var2_1991 var2_1992
# 1: 1990  AT    1    7         1         2         3         7         8         9
# 2: 1991  AT    2    8         1         2         3         7         8         9
# 3: 1992  AT    3    9         1         2         3         7         8         9
# 4: 1990  DE    4   10         4         5         6        10        11        12
# 5: 1991  DE    5   11         4         5         6        10        11        12
# 6: 1992  DE    6   12         4         5         6        10        11        12


0 commentaires