Wie doppelte (nach Name) Spalte in data.tables in R zu entfernen?

7

Beim Lesen eines Datensatzes mit fread habe ich festgestellt, dass ich manchmal doppelte Spaltennamen erhalte (zB fread hat kein check.names Argument)

%Vor%

Die Frage ist: Gibt es eine Möglichkeit, 1 von 2 Spalten zu entfernen, wenn sie denselben Namen haben?

    
Marcin Kosiński 16.03.2015, 21:45
quelle

3 Antworten

10

Wie wäre es mit

? %Vor%

? Von ?data.table :

  

j: Ein einzelner Spaltenname, einzelnes Expresson von Spaltennamen,             'List ()' von Ausdrücken von Spaltennamen, ein Ausdruck oder             Funktionsaufruf, der zu 'List' führt (einschließlich             "Data.frame" und "data.table", die auch "Listen" sind, oder             (wenn 'mit = FALSE') ein Vektor von Namen oder zu wählenden Positionen.

Dies wählt das erste Vorkommen jedes Namens aus (ich bin mir nicht sicher, wie Sie damit umgehen wollen).

Wie @DavidArenburg in den obigen Kommentaren vorschlägt, könntest du check.names=TRUE in data.table() verwenden (allerdings sehe ich keine check.names -Option in fread() - vielleicht fehlt mir etwas).

    
Ben Bolker 16.03.2015, 21:53
quelle
7

with=FALSE würde eine Kopie der von Ihnen ausgewählten Spalten zurückgeben. Entfernen Sie stattdessen einfach diese doppelten Spalten mit := als Referenz.

%Vor%     
Arun 17.03.2015 12:39
quelle
3

Unterschiedliche Ansätze:

  1. Indizierung

    my.data.table <- my.data.table[ ,-2, with=FALSE]

  2. Subsetting

    my.data.table <- subset(my.data.table, select = -2)

  3. Erstellen von eindeutigen Namen , wenn 1. und 2. nicht ideal sind (z. B. wenn Hunderte von Spalten vorhanden sind)

    setnames(my.data.table, make.names(names = names(my.data.table), unique=TRUE))

  4. Optionale Systematisierung der Löschung von Variablen, deren Namen ein bestimmtes Kriterium erfüllen (hier werden wir alle Variablen los, die einen Namen haben, der mit ".X" endet (X ist eine Zahl, beginnend bei 2 wenn) mit make.names )

    my.data.table <- subset(my.data.table, select = !grepl(pattern = "\.\d$", x = names(my.data.table)))

Dominic Comtois 16.03.2015 21:48
quelle

Tags und Links