gpt4 book ai didi

删除矩阵或数据框的重复行

转载 作者:行者123 更新时间:2023-12-02 05:32:44 25 4
gpt4 key购买 nike

我想检查矩阵或数据框的哪些行是重复的,我们如何找到它?

我们要删除重复的行。重复行是在第 1 列和第 2 列中具有相同值的行,忽略它们的排序。

例如,对于以下矩阵:

Col1   Col2     database 
A B IntAct
A B Bind
B A BioGrid

我只想拥有其中一行。

Col1   Col2     database 
A B IntAct

最佳答案

这是另一个使用 pmax/pmin 的选项

library(data.table)
setDT(df1)[!duplicated(pmin(Col1, Col2), pmax(Col1, Col2))]
# Col1 Col2 database
#1: A B IntAct

用更大的数据进行基准测试:

# dummy data
set.seed(123)
df <- data.frame(Col1 = sample(c("A", "B", "C"), 1000, replace = TRUE),
Col2 = sample(c("A", "B", "C"), 1000, replace = TRUE),
database = sample(c("IntAct", "Bind", "BioGrid"), 1000,
replace = TRUE), stringsAsFactors = FALSE)
# benchmark
microbenchmark::microbenchmark(
t = df[ !duplicated(t(apply(df[, 1:2], 1, sort))), ] ,
paste = df[ !duplicated(apply(df[, 1:2], 1,
function(i)paste(sort(i), collapse = ","))), ],
pmin = df[ !duplicated(cbind(pmin(df[, 1], df[, 2]), pmax(df[, 1], df[, 2]))), ],
times = 1000)

# Unit: milliseconds
# expr min lq mean median uq max neval cld
# t 33.49008 36.337253 38.374825 37.420015 39.610627 153.89251 1000 b
# paste 33.24177 36.102055 38.079015 37.330498 39.465803 151.43734 1000 b
# pmin 2.59116 2.790864 3.034999 2.910316 3.137389 11.99905 1000 a

关于删除矩阵或数据框的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com