2014-06-10 19 views
11

Ich habe sehr große Matrix, ich weiß, dass einige der Spaltennamen von ihnen dupliziert sind. Ich möchte also nur diese doppelten Spaltennamen finden und die Spalte aus dem Duplikat entfernen. Ich habe versucht duplicate(), aber es entfernt die doppelten Einträge. Würde jemand mir helfen, dies in R zu implement? Der Punkt ist, dass doppelte Spaltennamen möglicherweise keine doppelten Ganzzahlen haben.So entfernen Sie doppelte Spaltennamen in R?

Antwort

33

Lasst uns temp sagen ist Ihre Matrix

temp <- matrix(seq_len(15), 5, 3) 
colnames(temp) <- c("A", "A", "B") 

##  A A B 
## [1,] 1 6 11 
## [2,] 2 7 12 
## [3,] 3 8 13 
## [4,] 4 9 14 
## [5,] 5 10 15 

Sie

tun konnte
temp <- temp[, !duplicated(colnames(temp))] 

##  A B 
## [1,] 1 11 
## [2,] 2 12 
## [3,] 3 13 
## [4,] 4 14 
## [5,] 5 15 

Oder, wenn Sie die letzte dupliziert Spalte halten möchten, können Sie

temp <- temp[, !duplicated(colnames(temp), fromLast = TRUE)] 

##  A B 
## [1,] 6 11 
## [2,] 7 12 
## [3,] 8 13 
## [4,] 9 14 
## [5,] 10 15 
10

tun Or unter der Annahme data.frames könnten Sie subset:

verwenden
subset(iris, select=which(!duplicated(names(.)))) 

Beachten Sie, dass dplyr::select hier nicht anwendbar ist, da die Spalteneindeutigkeit in den Eingabedaten bereits erforderlich ist.

0

Speichern Sie alle Ihre Duplikate in einem Vektor, sagen Sie Duplikate, und verwenden Sie -Duplizierungen mit Einzelklammer-Subsetting, um doppelte Spalten zu entfernen.

 # Define vector of duplicate cols (don't change) 
     duplicates <- c(4, 6, 11, 13, 15, 17, 18, 20, 22, 
      24, 25, 28, 32, 34, 36, 38, 40, 
      44, 46, 48, 51, 54, 65, 158) 

     # Remove duplicates from food and assign it to food2 
     food2 <- food[,-duplicates] 
Verwandte Themen