我想对齐/匹配两个不相等的列

时间:2018-05-22 21:29:22

标签: r dataframe merge

所以我有两个不同长度的数据帧,如果有匹配,我想对齐它们。如果没有匹配,我想要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"选项。

1 个答案:

答案 0 :(得分:1)

使用包的解决方案。我们可以创建用于合并的列。 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)