J'ai un Dataframe arbitraire, sortie souhaitée, dw code>, avec des champs numériques et de caractères avec des noms arbitraires et dans un ordre arbitraire. (C'est-à-dire que je ne sais pas quel est le nom des champs et je ne sais pas quels champs seront numériques.) Je souhaite créer un nouveau Dataframe, dw2 code>, qui inclut deux champs numériques remplaçant chaque champ numérique dans la trame de données d'origine. L'ordre de colonne et le nom des champs numériques remplacent les noms de champ numérique d'origine doivent être similaires au ci-dessous. Remarque, que le champ bla code> se produit après fs_hi code>. (Dans l'exemple ci-dessous, les nouveaux champs numériques sont la valeur d'origine "-2" et la valeur d'origine "+4" pour la simplicité.) dw2 code> p>
3 Réponses :
Vous pouvez essayer:
Merci. J'ai édité ma question à affirmer que la trame de données a des "champs numériques et de caractères avec des noms arbitraires et dans un ordre arbitraire".
Vous pouvez créer un nouveau Dataframe, itérer sur toutes les colonnes et ajouter des copies des colonnes de caractères ou des versions HI / LO des colonnes numériques.
Quelque chose comme:
Merci. J'ai édité ma question à affirmer que la trame de données a des "champs numériques et de caractères avec des noms arbitraires et dans un ordre arbitraire".
OK, édité ma réponse aussi pour travailler avec des colonnes arbitraires types, noms et commandes
Vous pouvez utiliser des fonctions bien rangées pour cela, d'abord pour créer des données imbriquées.Frame pour les colonnes numériques avec hi et lo, puis inhormis tout pendant le nom "Hi" / "lo" à Nom de la colonne d'origine:
library(dplyr) library(tidyr) library(purrr) dw %>% mutate_if(is.numeric,~map(.x,~data.frame(lo=.x-2,hi=.x+4))) %>% unnest(cols=c(f1, fs, lt, br),names_sep="_") # A tibble: 4 x 10 sbj f1_lo f1_hi fs_lo fs_hi bla lt_lo lt_hi br_lo br_hi <fct> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> 1 A 8 14 4 10 bA 48 54 8 14 2 B 10 16 3 9 bB 68 74 9 15 3 C 18 24 5 11 bC 18 24 6 12 4 D 20 26 6 12 bD 20 26 7 13
Merci. Une semaine (ou 2) dans un avenir proche, j'aurai besoin de niveler pour devenir littérate de tiard.