Considérons le cadre de données suivant dans R :
TYPE VARIAVEL VALOR
A OPER_RELAC_VARIAVEL1 100
A OPER_RELAC_VARIAVEL2 200
A OPER_RELAC_VARIAVEL3 300
B OPER_RELAC_VARIAVEL1 100
B OPER_RELAC_VARIAVEL2 200
B OPER_RELAC_VARIAVEL3 300
A CLI_RELAC_VARIAVEL1 450
A CLI_RELAC_VARIAVEL2 320
A CLI_RELAC_VARIAVEL3 110
Je veux prendre la pertinence de chaque VALOR
sur la base de la racine de VARIAVEL
y TYPE
. Je n'ai pas de colonne avec la Racine de la VARIAVEL
mais ce serait tout ce qui se trouve avant la seconde. _
( OPER_RELAC
y CLI_RELAC
dans cet échantillon).
Le résultat attendu est :
TYPE VARIAVEL VALOR RELEVANCE
A OPER_RELAC_VARIAVEL1 100 0.167
A OPER_RELAC_VARIAVEL2 200 0.333
A OPER_RELAC_VARIAVEL3 300 0.500
B OPER_RELAC_VARIAVEL1 100 0.167
B OPER_RELAC_VARIAVEL2 200 0.333
B OPER_RELAC_VARIAVEL3 300 0.500
A CLI_RELAC_VARIAVEL1 450 0.511
A CLI_RELAC_VARIAVEL2 320 0.364
A CLI_RELAC_VARIAVEL3 110 0.125
Puisque, par exemple, 450 représente 51,1 % du total pour le type A
et la variable racine CLI_RELAC
.
J'en ai fini avec cette séquence de commandes :
1) Générer une colonne avec la variable Root en utilisant la librairie stringr
dados$VARIAVEL_MAE <- str_match(dados$VARIAVEL, "^([^_]+[_][^_]+)")[,2]
Merci à R:comment faire pour que grep retourne la correspondance, plutôt que la chaîne entière
2) Résumez dans un nouveau cadre de données les totaux agrégés par cette nouvelle colonne.
TOTAIS <- aggregate(VALOR ~ Type + VARIAVEL_MAE, data = dados, sum)
names(TOTAIS) <- c('Type', 'VARIAVEL_MAE', 'TOTAL')
3) Fusionnez ces deux cadres de données en utilisant ce qui est suggéré. aquí
dados <- merge(TOTAIS, dados, by = c('Type', 'VARIAVEL_MAE'))
dados$RELEVANCIA <- dados$VALOR / dados$TOTAL;
Y a-t-il une façon plus intelligente de le faire ou ai-je besoin de toutes ces étapes ?
Ma question est la suivante : en R, tout ce que je fais peut toujours être remplacé par quelque chose de plus rapide et de plus petit.