2014-06-10 12 views
11

Mam bardzo dużą matrycę, wiem, że niektóre nazwy z nich są duplikowane. więc po prostu chcę znaleźć te zduplikowane nazwy i usunąć kolumnę z duplikatu. Próbowałem duplicate(), ale usunięto zduplikowane wpisy. Czy ktoś pomógłby mi wszczepić to w R? chodzi o to, że duplikaty nazw zmiennych mogą nie powodować powielania.Jak usunąć zduplikowane nazwy kolumn w R?

Odpowiedz

33

Powiedzmy temp to matryca

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 

Można zrobić

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

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

Albo, jeśli chcesz zachować ostatnią kopiowane kolumnę można zrobić

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

Or przy założeniu data.frames można użyć subset:

Uwaga: tutaj nie ma zastosowania dplyr::select, ponieważ wymaga już niepowtarzalności kolumn w danych wejściowych.

0

Przechowuj wszystkie duplikaty w jednym wektorze, powiedz duplikaty, i użyj -duplikacji z pojedynczym podzbiorem nawiasów, aby usunąć zduplikowane kolumny.

 # 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]