Я хочу выровнять / сопоставить два неравных столбца - PullRequest
0 голосов
/ 23 мая 2018

поэтому у меня есть эти два кадра данных разной длины, и я хочу выровнять их, если есть совпадение.Если совпадений нет, я хочу получить NA или NULL.

Так это будет выглядеть так: df1:

ABCC1  
ADCY2  
ADNP2 
ADRA1B  
ALMS1   
AOC1

и df2:

ABCC1  
ABCC1  
ADCY2  
ADNP2  
ADRA1B

Iхочу, чтобы результаты были такими:

    ABCC1  ABCC1
    NA     ABCC1
    ADCY2  ADCY2
    ADNP2  ADNP2
    ADRA1B ADRA1B
    ALMS1  NA
    AOC1   NA

Я использовал слияние, но у меня не получалось.Возможно, потому что я не знаю, как правильно использовать опцию «by».

1 Ответ

0 голосов
/ 23 мая 2018

Решение с использованием пакета .Мы можем создать столбцы для слияния.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  

DATA

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...