86 votes

Supprimer plusieurs colonnes de data.table

Quelle est la bonne façon de supprimer plusieurs colonnes d'un data.table ? J'utilise actuellement le code ci-dessous, mais j'obtenais un comportement inattendu lorsque je répétais accidentellement le nom d'une des colonnes. Je ne savais pas s'il s'agissait d'un bogue ou si je ne devais pas supprimer des colonnes de cette manière.

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"

Ce qui précède fonctionne bien, mais

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"

41voto

Ricardo Saporta Points 22951

Il s'agit d'un bogue solide et reproductible. Il a été classé comme Bug #2791 .

Il semble que la répétition de la colonne tente de supprimer les colonnes suivantes.
S'il n'y a plus de colonnes, R s'arrête.


MISE À JOUR : Corrigé dans la version 1.8.11. De NOUVELLES :

L'affectation à la même colonne deux fois dans la même requête est maintenant une erreur plutôt qu'un plantage dans certaines circonstances ; par exemple, DT[,c("B", "B"):=NULL] (supprimer par référence la même colonne deux fois). Merci à Ricardo ( #2751 ) et matt_k ( #2791 ) pour l'établissement de rapports. Tests ajoutés.

20voto

Pankil Shah Points 850

La réponse à cette question a déjà été apportée, mais il s'agit d'une question secondaire.

Je préfère la syntaxe suivante pour déposer plusieurs colonnes

DT[ ,`:=`(x = NULL, y = NULL)]

parce qu'il correspond à celui qui permet d'ajouter plusieurs colonnes (variables)

DT[ ,`:=`(x = letters, y = "Male")]

Cela permet également de vérifier s'il y a des doublons dans les noms de colonnes. Ainsi, en essayant de supprimer x deux fois, un message d'erreur s'affiche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X