所以我有两个不同长度的数据帧,如果有匹配,我想对齐它们。如果没有匹配,我想要NA或NULL。
所以看起来像这样: DF1:
ABCC1
ADCY2
ADNP2
ADRA1B
ALMS1
AOC1
和df2:
ABCC1
ABCC1
ADCY2
ADNP2
ADRA1B
我希望结果如下:
ABCC1 ABCC1
NA ABCC1
ADCY2 ADCY2
ADNP2 ADNP2
ADRA1B ADRA1B
ALMS1 NA
AOC1 NA
我使用过合并,但我没有为我工作。可能是因为我不知道如何正确使用" by"选项。
答案 0 :(得分:1)
使用dplyr包的解决方案。我们可以创建用于合并的列。 ID1
与原始列相同,而ID2
是每个ID1
的索引号。之后,我们可以使用full_merge
创建所需的输出。
library(dplyr)
dat1_2 <- dat1 %>%
mutate(ID1 = V1) %>%
group_by(V1) %>%
mutate(ID2 = row_number()) %>%
ungroup()
dat2_2 <- dat2 %>%
mutate(ID1 = V1) %>%
group_by(V1) %>%
mutate(ID2 = row_number()) %>%
ungroup()
dat3 <- full_join(dat1_2, dat2_2, by = c("ID1", "ID2")) %>%
select(-starts_with("ID")) %>%
arrange(V1.y)
dat3
# # A tibble: 7 x 2
# V1.x V1.y
# <chr> <chr>
# 1 ABCC1 ABCC1
# 2 NA ABCC1
# 3 ADCY2 ADCY2
# 4 ADNP2 ADNP2
# 5 ADRA1B ADRA1B
# 6 ALMS1 NA
# 7 AOC1 NA
数据强>
dat1 <- read.table(text = "ABCC1
ADCY2
ADNP2
ADRA1B
ALMS1
AOC1",
header = FALSE, stringsAsFactors = FALSE)
dat2 <- read.table(text = "ABCC1
ABCC1
ADCY2
ADNP2
ADRA1B",
header = FALSE, stringsAsFactors = FALSE)