【问题标题】:Remove absolute duplicates in each row of a data frame in R删除R中数据框每一行中的绝对重复项
【发布时间】:2019-02-08 09:44:38
【问题描述】:

我正在尝试删除我的数据框中具有绝对重复项的所有行。这是一个例子。

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

当您运行上述命令时,您基本上将拥有一个数据框,其中包含“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


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

问候 帕维尔

【讨论】:

    【解决方案2】:

    我认为您想要以下内容:

    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,否则返回 false。然后我们将其用作vector.combo 的索引。

    【讨论】:

    • 谢谢。我自己做了一个函数,但是你的函数效率更高。
    • @AdamRalphus :请务必对答案进行投票或将其标记为正确以将其关闭。这样,其他人就会知道首选方式,并且发帖者会获得荣誉。
    【解决方案3】:
    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,]
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多