Beim Lesen eines Datensatzes mit fread
habe ich festgestellt, dass ich manchmal doppelte Spaltennamen erhalte (zB fread
hat kein check.names
Argument)
Die Frage ist: Gibt es eine Möglichkeit, 1 von 2 Spalten zu entfernen, wenn sie denselben Namen haben?
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).
Unterschiedliche Ansätze:
Indizierung
my.data.table <- my.data.table[ ,-2, with=FALSE]
Subsetting
my.data.table <- subset(my.data.table, select = -2)
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))
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)))
Tags und Links r data.table