R语言 移除两列中具有重复因子水平组合的行

zzzyeukh  于 2023-03-10  发布在  其他
关注(0)|答案(3)|浏览(149)

bind_rows()大量的 Dataframe 之后,我得到了如下的 Dataframe :

tmp <- data.frame(Query=c("A", "B", "C", "D", "A"), target=c("D", "A", "A", "A", "B"), values=runif(5))
tmp
  Query target     values
1     A      D 0.06075322
2     B      A 0.43179750
3     C      A 0.32325309
4     D      A 0.26714620
5     A      B 0.96854999

我需要删除所有包含Querytarget组合的行,这些行以前在任一方向上出现过(AxD是DxA的副本)。在本例中,所需的输出为(因为行4是行1的副本,行5是行2的副本)

tmp
      Query target     values
    1     A      D 0.06075322
    2     B      A 0.43179750
    3     C      A 0.32325309

非常感谢!

vlju58qv

vlju58qv1#

sort所选列并丢弃duplicated行:

cols = c("Query", "target")
tmp[!duplicated(t(apply(tmp[cols], 1, sort))), ]

#  Query target    values
#1     A      D 0.7205899
#2     B      A 0.5484203
#3     C      A 0.4503456
y53ybaqx

y53ybaqx2#

潮汐宇宙

tmp <- data.frame(Query=c("A", "B", "C", "D", "A"), target=c("D", "A", "A", "A", "B"), values=runif(5))
tmp
#>   Query target    values
#> 1     A      D 0.4596637
#> 2     B      A 0.1274885
#> 3     C      A 0.2051829
#> 4     D      A 0.4037819
#> 5     A      B 0.1777751

library(tidyverse)

tmp %>% 
  rowwise() %>% 
  mutate(fltr = str_c(sort(c_across(c("Query", "target"))), collapse = "")) %>% 
  distinct(fltr, .keep_all = TRUE) %>% 
  select(-fltr) %>% 
  ungroup()
#> # A tibble: 3 x 3
#>   Query target values
#>   <chr> <chr>   <dbl>
#> 1 A     D       0.460
#> 2 B     A       0.127
#> 3 C     A       0.205

创建于2023年2月28日,使用reprex v2.0.2

t1rydlwq

t1rydlwq3#

使用vectorizedpmin/pmax

subset(tmp, !duplicated(cbind(pmin(Query, target), pmax(Query, target))))
  Query target     values
1     A      D 0.06075322
2     B      A 0.43179750
3     C      A 0.32325309

相关问题