例如 DF1 是:
Id1 Id2
1 10
2 10
3 7
4 7
5 10
并想要 DF2:
Id1 Id2
1 2
1 5
2 5
3 4
数据框 DF2 是 DF1 中 Id1 列中的一组值,它们共享 DF1 中 Id2 中的公共值。
我的尝试:
temp <- do.call("cbind", split(DF1, rep(c(1,2), length.out = nrow(DF1))))
(DF2 <- temp %>% select("1.Id1", "2.Id2"))
但这不会生成成对数据框:
Id1 Id2
1 2
3 4
这是另一个tidyverse
方法使用full_join
.
library(dplyr)
library(purrr)
dat2 <- dat %>%
full_join(dat, by = "Id2") %>%
filter(Id1.x != Id1.y) %>%
mutate(Id_sort = map2_chr(Id1.x, Id1.y, ~paste(sort(c(.x, .y)), collapse = ", "))) %>%
distinct(Id_sort, .keep_all = TRUE) %>%
select(Id1 = Id1.x, Id2 = Id1.y)
dat2
# Id1 Id2
# 1 1 2
# 2 1 5
# 3 2 5
# 4 3 4
Data
dat <- read.table(text = "Id1 Id2
1 10
2 10
3 7
4 7
5 10",
header = TRUE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)