Удалить абсолютные дубликаты в каждой строке кадра данных в R - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь удалить все строки, которые имеют абсолютные дубликаты в моем фрейме данных.Вот пример.

library(gtools)
vector <-  c(15.3, -31.8, -35.6, -14.5, 3.1,-24.5)
vector.combo <- data.frame(combinations(n = 12, r = 6, v = c(vector,-vector)))

Когда вы запустите указанную выше команду, у вас будет в основном фрейм данных, содержащий все уникальные комбинации элементов «вектор» и «-вектор».Например, вы увидите что-то вроде этого:

-35.6   -31.8   -15.3   -3.1    3.1   35.6

Теперь я хочу удалить все строки, которые содержат абсолютные дубликаты, то есть я хочу удалить строки, содержащие элементы, такие как «35.6» и"-35,6".

Я пробую это:

vector.combo[!duplicated(abs(vector.combo)),]

, но это не сработало.

Любой совет будет оценен.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Решение с использованием dplyr:

library(gtools)
library(dplyr)

vector <-  c(15.3, -31.8, -35.6, -14.5, 3.1,-24.5)
vector.combo <- data.frame(combinations(n = 12, r = 6, v = c(vector,-vector)))
dup_idx <- 
  vector.combo %>% 
  transmute_all(abs) %>% 
  duplicated()

vector.combo[!dup_idx,]

С уважением, Павел

0 голосов
/ 08 февраля 2019
get_rid <- c()
for ( i in 1 : length(vector.combo[,1]) ) {
    if ( length(unique(abs(vector.combo[i,]))) != 6 ) {
    get_rid <- c(get_rid, i)
    }
}
vector.combo <- vector.combo[-get_rid,]

Это должно сделать это.

0 голосов
/ 08 февраля 2019

Я думаю, что вам нужно следующее:

library(gtools)
vector <-  c(15.3, -31.8, -35.6, -14.5, 3.1,-24.5)
vector.combo <- data.frame(combinations(n = 12, r = 6, v = c(vector,-vector)))

unique_combo <- vector.combo[apply(abs(vector.combo), 1, function(x) length(unique(x))) ==6,]

Индекс идет построчно по абсолютному значению таблицы и подсчитывает, сколько уникальных элементов.Если число уникальных элементов равно 6, он возвращает истину, в противном случае - ложь.Затем мы используем это как индекс для vector.combo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...