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我的意思是列而不是行,无论如何我可以修改上面的结构,这是一个很好的使用结构,谢谢。