0
votes

Convertir des champs de Dataframe numériques sélectionnés en deux champs représentant une plage

J'ai un Dataframe arbitraire, dw , 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 , 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 se produit après fs_hi . (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é.) xxx

sortie souhaitée, dw2 xxx


0 commentaires

3 Réponses :


0
votes

Vous pouvez essayer: xxx


1 commentaires

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".



0
votes

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: xxx


2 commentaires

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



1
votes

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


1 commentaires

Merci. Une semaine (ou 2) dans un avenir proche, j'aurai besoin de niveler pour devenir littérate de tiard.