2015-02-16 8 views
12

Ich versuche Spalten aus einer DT zu einem neuen DT mit select {dplyr} zu extrahierendplyr „Select“ - Fehler: gefunden dupliziert Spaltenname

extract_Data <- select(.data = master_merge, subjectID, activity_ID, 
          contains("mean\\(\\)"), contains("std\\(\\)")) 

Es gibt 563 Spalten, so dass ich das extrahieren bin gefragt erste und zweite Spalte (Betreff, Aktivität) und alle anderen Spalten, in denen mean() oder std() vorhanden ist.

Es gibt keine doppelten Spalten, die hier erstellt werden können. so über das Warum ratlos. Ich habe jede Variation von select aber immer Error: Duplicated Column Name ausprobiert.

Wie kann ich dies beheben - ich habe alle 563 Spalten Namen durchlaufen und es gibt keine Duplikate.

+1

Was ist, wenn Sie 'Übereinstimmungen (" (meaned | std) \\ (. * \\) ")' anstelle der zwei aktuellen 'contains' Anweisungen verwenden? ...editiert, um 'matches' anstelle von' contains' zu verwenden –

+0

gleicher Fehler "Fehler: doppelter Spaltenname gefunden" – scopa

+0

Mit 'Matches' auch? –

Antwort

8

Duplikate außerhalb des Übereinstimmungsfilters können einen "doppelten Namen" -Fehler verursachen. Beispiel:

library(dplyr) 
x <- data.frame(1, 2, 3) 
names(x) <- c("a", "a", "b") 

x %>% 
    select(matches("b")) 

Wenn Sie nicht über diese Spalten benötigen, beseitigen sie mit

x <- x[ !duplicated(names(x)) ] 
+1

Das ist klar - was ich nicht verstehe, ist, warum dies als Duplikat zurückgegeben wird - fBodyAcc-bandsEnergy() - 1,8 "" fBodyAcc-bandsEnergy() - 9,16 "and" fBodyGyro- bandsEnergy() - 1,24 "" fBodyGyro-bandsEnergy() - 25,48 " – scopa

+0

aber sie sind keine Dubletten! – scopa

+0

'duplizierte' Funktion gibt das erste Auftreten des Duplikats nicht zurück. Probiere 'which (names (master_merge) ==) fBodyAcc-bandsEnergy() - 1,8") ' – bergant

29

Die Wurzel des Problems ist, ungültige Zeichen in den ursprünglichen Spaltennamen. Die Diskussion in Variable Name Restrictions in R gilt auch für Spaltennamen. Versuchen Sie, eindeutige Spaltennamen mit gültigen Zeichen mit make.names() zu erzwingen.

valid_column_names <- make.names(names=names(master_merge), unique=TRUE, allow_ = TRUE) 
names(master_merge) <- valid_column_names 
+0

Ausgezeichnete Lösung. Sehr kurz und verallgemeinerbar. – Mikuana

-3

Bevor Sie die Spaltennamen die Spalten ausfiltern zuweisen, indem Sie eine Liste von Indizes bekommen die Spalten Namen

meanStdColumnsNames <- grep("mean|std", features$V2, value = TRUE) 
0

keine direkte Antwort mit

meanStdColumns <- grep("mean|std", features$V2, value = FALSE) 

und dann zuweisen, aber das wird vielen Menschen helfen.

Für alle Ihre Coursetra Studenten, die dieses Problem mit diesem Datensatz haben: sind doppelte Spaltennamen. Zum Beispiel wird 'fBodyAccJerk-bandsEnergy() - 1,16' zweimal gefunden. Check:

your_merged_data_with_column_names[,400:420]

Ich würde gerne die Ausgabe zeigen, aber mein Browser die ‚Code‘ Taste noch die Strg-K Abkürzung und es gibt zu viele Daten einrücken von Hand nicht unterstützen. Probieren Sie diesen Code selbst aus und überprüfen Sie sorgfältig die "Variablen nicht gezeigt"!

Ich arbeite gerade an einer Lösung, möglicherweise unter Verwendung der obigen Antworten oder des Kursforums. Hier

11

ist die Lösung, die ich gefunden habe:

data <- data[ , !duplicated(colnames(data))] 

Diese Untergruppen den Datensatz ohne alle duplizierten Spalten.

Ich hoffe, es hilft.

-1

Ich war verwirrt durch den gleichen Fehler. Vermeiden Sie die Auswahl. Wenn "meanStdcolumns" die Liste der Spalten ist, die "mean" oder "std" enthalten (was Sie mit grep erhalten können), scheint master_merge [, meanStdcolumns] zu funktionieren.

Verwandte Themen