2014-06-10 48 views
11

我有非常大的矩阵,我知道他们的一些姓氏是重复的。所以我只想找到那些重复的名称并从重复删除列。 我试过duplicate(),但它删除了重复的条目。 有人会帮我在R中实现这个吗? 重点是,重复的名称,可能没有重复的条目。如何删除R中的重复列名?

回答

33

假设temp是你的矩阵

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 

你可以做

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

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

或者,如果你想保持过去的重复列,你可以做

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

或者假设您可以使用数据框架subset

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

请注意,dplyr::select在此处不适用,因为它需要输入数据中的列唯一性。

0

将所有副本存储到一个向量中说重复,并使用带有单个括号子集的重复删除重复的列。

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