6
votes

Comment ajoutez une colonne dans un cadre de données dans R

J'ai importé des données à partir d'un fichier dans une trame de données dans R. C'est quelque chose comme ça. XXX

Donc maintenant, je veux ajouter la colonne En fonction des valeurs de la colonne nom . Alors quelque chose comme si name = (a, d), catégorie = 'cat1' etc.

Ce n'est qu'un exemple simple que je donne. J'ai un grand nombre de noms et de catégories afin que je souhaite une syntaxe compacte. Comment puis-je faire cela?

Edit: J'ai changé l'exemple pour mieux répondre à mes besoins car le nom peut être tout numérique. Désolé de ne pas être trop clair avant.

r

0 commentaires

5 Réponses :


3
votes

Vous pouvez utiliser ifelse code>. Si votre trame de données a été appelée df code>, vous feriez:

df$cat <- ifelse(df$name<100, "Ones", "Hundreds")
df$cat <- ifelse(df$name<1000, df$cat, "Thousands")


1 commentaires

Désolé, j'aurais dû être plus clair, j'ai donc changé l'exemple, le nom peut être une valeur alphabétique non numérique. Mais merci, je vais essayer d'appliquer une logique comme ceci et voir.



2
votes

Vous pouvez utiliser une carte. (Mis à jour pour utiliser stringsasfacteurs = false ) xxx


6 commentaires

+1 Nice utilisation de carte () . C'est la deuxième fois dans une semaine quelqu'un ici a utilisé carte () dans une réponse et ils semblent vraiment utiles.


@pchalasani Merci c'est une bonne façon de faire le recodage. Cependant, j'ai essayé cela et le mappage est tout faux d'une manière ou d'une autre quand je l'ai fait dans mes données réelles. L'exemple que vous donnez bien. Des raisons possibles à cela?


@Sfactor qui est difficile à dire sauf si je vois plus de vos données réelles


@PCHALASANI J'ai ajouté ce que j'ai fait dans la question. Qu'est-ce que je fais en train de tordre ici?


@sfactor: obtenu! Vous pouvez le réparer si vous utilisez stringsasfactors = false dans la première ligne lorsque vous construisez la trame de données. J'ai réparé ma solution pour faire cela. Incidemment, le comportement par défaut de RS du traitement des colonnes de trame de données à la chaîne, car des facteurs me mordent souvent. Je dois continuer à dire stringsasfactors = false dans de nombreux endroits de mon code. Parfois, je viens de le mettre sur false globalement comme dans les options (StringsasFactors = FALSE) Parce que j'ai rarement besoin d'interpréter des cordes comme des facteurs de mon travail, mais votre utilisation peut être différente.


Sans Réduire , Carte semble étrange ... Pourquoi pas seulement utiliser mapply ?



2
votes

[Mise à jour suivant le commentaire de l'OP et modifié q] xxx

à l'aide des cadres de données ci-dessus, nous pouvons faire une fusion de base de données. Vous devez configurer lookup pour le nom nom catégorie combinaisons que vous voulez, qui est ok s'il n'y a pas un très grand nombre de < Code> Nom S (au moins Vous devez uniquement les énumérer une fois que chacun dans recherche et que vous n'avez pas à le faire dans l'ordre - liste Tous CAT1 nom s premier, etc.): xxx


une option est indexation: xxx < p> Une alternative qui améliore mieux est, xxx


0 commentaires

1
votes

Départ:

  • coupé ()
  • recode () dans la voiture package

0 commentaires

0
votes

Peut-être plus simple et plus lisible en utilisant ifelse et% en%: xxx


0 commentaires