Как найти индексы определенных строк в кадре данных - PullRequest
1 голос
/ 15 апреля 2019

У меня есть датафрейм A, который выглядит так:

col 1   col2   col3
 NL      6       9
 UK      5       5
 US      9       7

и у меня есть фрейм данных B, состоящий из подмножества строк большого фрейма данных, выглядящих так:

 col 1   col2   col3
 NL      6       9
 UK      5       5

Теперь я хочу найти индексы строк из B в A, поэтому он должен вернуть 1 and 2. Кто-нибудь знает, как это сделать?

EDIT Далее я также хочу найти индексы строк в A, когда у меня есть только первые два столбца в B. Поэтому в этом случае он также должен возвращать 1 and 2. Кто-нибудь знает, как это сделать?

1 Ответ

1 голос
/ 15 апреля 2019

Как правило, match получает индекс. В нашем случае подход состоит в том, чтобы paste собрать строки и получить индекс с match

match(do.call(paste, df2), do.call(paste, df1)

Если есть только подмножество столбцов с одинаковыми именами столбцов, получить вектор имен столбцов с intersect, подмножество наборов данных, выполнить paste и получить индекс с match

nm1 <- intersect(names(df1), names(df2))
match(do.call(paste, df2[nm1]), do.call(paste, df1[nm1]))

Другой вариант - join, где мы создаем индекс строки в обоих наборах данных, выполняем объединение и извлекаем индекс строки

 library(dplyr)
 df2 %>%
    mutate(rn = row_number()) %>% 
   left_join(df2 %>% 
          mutate(rn = row_number()), by = c('col1', 'col2', 'col3')) %>% 
   pull(rn.y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...