Je me suis gratté la tête par-dessus. J'ai deux trames de données: df
multiplier les colonnes de trames de données
df <- data.frame(group = 1:3,
age = seq(30, 50, length.out = 3),
income = seq(100, 500, length.out = 3),
assets = seq(500, 800, length.out = 3))
et weights
weights <- data.frame(age = 5, income = 10)
Je voudrais multiplier ces deux trames de données uniquement pour les mêmes noms de colonnes. J'ai essayé quelque chose comme ceci:
colwise(function(x) {x * weights[names(x)]})(df)
mais que de toute évidence n'a pas fonctionné comme colwise
ne garde pas le nom de colonne dans la fonction. J'ai regardé diverses solutions (example), mais je suis incapable de trouver une réponse.
Le résultat data.frame
devrait ressembler à ceci:
structure(list(group = 1:3, age = c(150, 200, 250), income = c(1000,
3000, 5000), assets = c(500, 650, 800)), .Names = c("group",
"age", "income", "assets"), row.names = c(NA, -3L), class = "data.frame")
group age income assets
1 1 150 1000 500
2 2 200 3000 650
3 3 250 5000 800
merci @Gavin. (J'ai regardé balayage avant de poster ceci, mais n'ai pas compris la fonction du tout). Pourriez-vous préciser comment ne pas compter sur l'ordre des noms? La df originale pourrait avoir 100s de colonnes, mais les poids pourraient être seulement peu et dans n'importe quel ordre. – karlos
Voir ma mise à jour. La clé est de s'assurer que chaque objet est dans le bon ordre pendant la ligne de code. Réglez donc l'ordre que vous voulez dans 'nams', puis commandez tous les objets par' nams'. –
merci! Je pense que c'est une excellente solution et pourrait fonctionner dans de nombreux cas. – karlos