如何删除R中的重复列名?

use*_*363 16 r

我有一个非常大的矩阵,我知道它们的一些副本是重复的.所以我只想找到那些重复的colnames并从列中删除重复.我试过duplicate(),但它删除了重复的条目.有人会帮我在R中暗示这个吗?重点是,重复的colnames,可能没有重复的entires.

Dav*_*urg 39

让我们说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
Run Code Online (Sandbox Code Playgroud)

你可以做到

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

##      A  B
## [1,] 1 11
## [2,] 2 12
## [3,] 3 13
## [4,] 4 14
## [5,] 5 15
Run Code Online (Sandbox Code Playgroud)

或者,如果要保留最后一个重复列,则可以执行此操作

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

##       A  B
## [1,]  6 11
## [2,]  7 12
## [3,]  8 13
## [4,]  9 14
## [5,] 10 15
Run Code Online (Sandbox Code Playgroud)


Hol*_*ndl 12

或者假设您可以使用data.frames subset:

subset(iris, select=which(!duplicated(names(.)))) 
Run Code Online (Sandbox Code Playgroud)

请注意,dplyr::select这里不适用,因为它已经在输入数据中需要列唯一性.

  • `iris &lt;- iris %&gt;% subset(., select = which(!duplicated(names(.))))` 管道友好版本 (2认同)