dplyr在两列上不同

dplyr在两列上不同,r,tidyverse,R,Tidyverse,我有一个表格,其中前两行是样本标识符,第三行是距离的度量,例如: df<-data.table(H1=c(1,2,3,4,5),H2=c(7,3,2,8,9), D=c(100,4,55,66,35)) 我只想在两列中找到唯一的对,即1-7,2-3,4-8,5-9。删除出现在不同列中的重复2-3和3-2对,但保留第三行,即2-3和3-2的距离相同 # example data df<-data.frame(H1=c(1,2,3,4,5), H2=c(7

我有一个表格,其中前两行是样本标识符,第三行是距离的度量,例如:

df<-data.table(H1=c(1,2,3,4,5),H2=c(7,3,2,8,9), D=c(100,4,55,66,35))
我只想在两列中找到唯一的对,即1-7,2-3,4-8,5-9。删除出现在不同列中的重复2-3和3-2对,但保留第三行,即2-3和3-2的距离相同

# example data
df<-data.frame(H1=c(1,2,3,4,5),
               H2=c(7,3,2,8,9), 
               D=c(100,4,55,66,35), stringsAsFactors = F)

library(dplyr)

df %>%
  rowwise() %>%             # for each row
  mutate(HH = paste0(sort(c(H1,H2)), collapse = ",")) %>% # create a new variable that orders and combines H1 and H2
  group_by(HH) %>%          # group by that variable
  filter(D == max(D)) %>%   # keep the row where D is the maximum (assumed logic*)
  ungroup() %>%             # forget the grouping
  select(-HH)               # remove unnecessary variable

# # A tibble: 4 x 3
#      H1    H2     D
#   <dbl> <dbl> <dbl>
# 1     1     7   100
# 2     3     2    55
# 3     4     8    66
# 4     5     9    35

*注意:不知道您的逻辑是什么,以保持1行的重复。我不得不用一些东西作为例子,在这里我保留了D值最高的行。如果需要,此逻辑可以更改。

保留第三行而不是第二行的逻辑是什么?我将发布一个解决方案,希望能帮助您…我认为OP更希望区分,.keep_all=TRUE。Oops只是现在才理解了领带的问题,抱歉,Oops我的意思是列而不是行,无论如何我可以修改上面的结构,这是一个很好的使用结构,谢谢。