J'ai des données stockées qui inclut une colonne de chaîne qui ressemble un peu à un dictionnaire. La forme générale est des éléments répétitifs de "catégorie: montant", par exemple "A: 1, B: 3, c: 10", etc.
dans toute la table, il ressemblerait à quelque chose comme: p> Je veux trouver la somme de chaque colonne regroupée par l'utilisateur, mais pour les données1 et les données2, les sommes doivent être regroupées par les catégories imbriquées (A, B et C). Le résultat souhaité basé sur la table d'échantillonnage ci-dessus serait le suivant: p> Je suis tenu de renvoyer les données de ce formulaire de chaîne. Quelle serait la meilleure façon de structurer les données de la chaîne, d'effectuer les calculs nécessaires sur toutes les colonnes, puis de renvoyer les données calculées en une seule colonne? P> P>
5 Réponses :
Voici une solution de base désordonnée, je suis sûr que je peux être améliorée (mais obtient le résultat):
Je pense à Cela dépend de vos données réelles, si vous avez toutes les catégories pour tous les utilisateurs (comme Tidyverse CODE> Package (principalement dplyr < / Code> et TidyR code> ) ... Peut-être que ce sera possible avec quelque chose comme ceci: p>
data1 code> et data2 code> colonnes avec séparé () code> ou extraire () code> , puis li>
group_by () code> utilisateurs, sommarise_all () code> avec somme () code> , puis li>
Mutate () Code> avec des noms et des valeurs concaténants par simple paste0 () code>? li>
ol>
"A: 1, B: 2, C: 3" code>) ou s'il arrive qu'il existe une certaine catégorie manquant (comme "b: 2, c: 3" code> sans a code>). p>
Faire cela en deux parties.
achats code> et plaintes code> pour chaque utilisateur code>. li>
ol> xxx pré>
- Faites la manipulation sur
data1 code> et data2 code> et joindre avec df1 code> li>
ol> xxx pré> ceci renvoie p> xxx pré> p>
une solution em> em>, qui suppose que la structure de A:?, b:?, c:? code> est tout le temps donné. Premier Split code> par utilisateur em> que d'utiliser gsub code> et supprime tout 0-9, code>, puis divisé en utilisant Read.Table code>, calculez le colsums code> et appelez coller code> pour insérer à nouveau A:?, B:?, C:? Code>. Finlay combine ceci avec le résultat de colsums code> pour les colonnes achats em> et plaintes em>:
Le fichier plus ou moins ressemble à un objet JavaScript. Ie JSON code>. Le format général de JSON est [{"A": 1, "B": 2, "C": 10}, {"A": 2, "B": 3, "C": 30}] code>. Nous pouvons transformer la chaîne en utilisant des expressions régulières et l'utilisation jsonlite :: fromjson code>: