我想除去所有在我的数据帧绝对重复的行。下面是一个例子。
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)),]
但没有奏效。
任何尖端,将不胜感激。
谢谢!
解决方案使用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,]
问候,保罗
我想你想要的下面:
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
。
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,]
这应该这样做。