作为R的数据帧的每一行中删除重复绝对

问题描述 投票:0回答:3

我想除去所有在我的数据帧绝对重复的行。下面是一个例子。

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)),]

但没有奏效。

任何尖端,将不胜感激。

谢谢!

r
3个回答
1
投票

解决方案使用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,]

问候,保罗


1
投票

我想你想要的下面:

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,则返回true,否则假。然后,我们使用的是作为索引vector.combo


0
投票
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,]

这应该这样做。

© www.soinside.com 2019 - 2024. All rights reserved.