我有一个巨大的数据集,变量中包含重复的信息,当这种关系在 ID1、ID2 或 ID2、ID1(不同列中的那些)的意义上理解时,变量中的值也可以从不同的 ID 关系中重复。我想用反向 ID 顺序删除相同的信息,如下所示:
ID1 ID2 value
BHFUD13XG KLSIENAL1 0.3475
GLADKK123 FBNAFLEL2 0.2956
KLSIENAL1 BHFUD13XG 0.3475
FBNAFLEL2 GLADKK123 0.2956
DGFEORM23 SHDKG14NV 0.3475
SHDKG14NV DGFEORM23 0.3475
Run Code Online (Sandbox Code Playgroud)
干净的
ID1 ID2 value
BHFUD13XG KLSIENAL1 0.3475
GLADKK123 FBNAFLEL2 0.2956
DGFEORM23 SHDKG14NV 0.3475
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
正如你所说,如果数据很大,使用 不是一个好主意rowwise,但你可以尝试
library(dplyr)
df %>%
rowwise %>%
mutate(key = paste0(sort(c(ID1,ID2)), collapse = "-")) %>%
select(value, key) %>%
distinct() %>%
separate(key, c("ID1", "ID2"), "-")
value ID1 ID2
<dbl> <chr> <chr>
1 0.348 BHFUD13XG KLSIENAL1
2 0.296 FBNAFLEL2 GLADKK123
3 0.348 DGFEORM23 SHDKG14NV
Run Code Online (Sandbox Code Playgroud)
或者
df %>%
mutate(id1 = pmin(ID1, ID2), id2 = pmax(ID1, ID2)) %>%
select(id1, id2, value) %>%
distinct()
id1 id2 value
1 BHFUD13XG KLSIENAL1 0.3475
2 FBNAFLEL2 GLADKK123 0.2956
3 DGFEORM23 SHDKG14NV 0.3475
Run Code Online (Sandbox Code Playgroud)
df %>%
mutate(id1 = pmin(ID1, ID2), id2 = pmax(ID1, ID2)) %>%
distinct(id1, id2, value, .keep_all = T) %>%
select(-id1, -id2) # and select whatever you want.
ID1 ID2 value id1 id2
1 BHFUD13XG KLSIENAL1 0.3475 BHFUD13XG KLSIENAL1
2 GLADKK123 FBNAFLEL2 0.2956 FBNAFLEL2 GLADKK123
3 DGFEORM23 SHDKG14NV 0.3475 DGFEORM23 SHDKG14NV
Run Code Online (Sandbox Code Playgroud)