J'ai une très grosse matrice, je sais que certains de leurs noms sont dupliqués. donc je veux juste trouver ces noms de fichiers dupliqués et supprimer de la colonne de dupliquer. J'ai essayé duplicate()
, mais cela supprime les entrées en double. Est-ce que quelqu'un pourrait m'aider à implémenter ceci dans R? Le fait est que, les noms de fichiers en double, pourraient ne pas avoir d'entiers en double.
Disons que temp
est votre matrice
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
Vous pourriez faire
temp <- temp[, !duplicated(colnames(temp))]
## A B
## [1,] 1 11
## [2,] 2 12
## [3,] 3 13
## [4,] 4 14
## [5,] 5 15
Ou, si vous voulez conserver la dernière colonne dupliquée, vous pouvez faire
temp <- temp[, !duplicated(colnames(temp), fromLast = TRUE)]
## A B
## [1,] 6 11
## [2,] 7 12
## [3,] 8 13
## [4,] 9 14
## [5,] 10 15
Ou en supposant que data.frames vous pouvez utiliser subset
:
subset(iris, select=which(!duplicated(names(.))))
Notez que dplyr::select
n'est pas applicable ici car il nécessite déjà l'unicité des colonnes dans les données d'entrée.
Stockez tous vos doublons dans un seul vecteur, par exemple, et utilisez -duplications avec un seul jeu de crochets pour supprimer les colonnes en double.
# 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]
Pour supprimer une colonne en double spécifique par son nom, vous pouvez procéder comme suit:
test = cbind(iris, iris) # example with multiple duplicate columns
idx = which(duplicated(names(test)) & names(test) == "Species")
test = test[,-idx]
Pour supprimer toutes les colonnes dupliquées, c'est un peu plus simple:
test = cbind(iris, iris) # example with multiple duplicate columns
idx = which(duplicated(names(test)))
test = test[,-idx]
ou:
test = cbind(iris, iris) # example with multiple duplicate columns
test = test[,!duplicated(names(test))]