Как найти значения из одного столбца, которые встречаются где-либо в другом столбце той же таблицы - PullRequest
4 голосов
/ 29 октября 2019

Хорошо, давайте представим, что у нас есть таблица (датафрейм, таблица) со статьями, написанными авторами. Каждая статья была рецензирована другим автором, но не все авторы являются рецензентами, например,

articles <- tibble(author=c("user1", "user2", "user3"), reviewer=c("user2", "user3", "user2"))
> articles
# A tibble: 3 x 2
  author reviewer
  <chr>  <chr>   
1 user1  user2   
2 user2  user3   
3 user3  user2   

, чтобы просто посмотреть интересующие вас столбцы. Итак, мы видим, что user2 и user3 являются авторами статей и также являются рецензентами. user1 не является рецензентом. Как мы на самом деле возвращаем пользователей, которые написали и рецензировали статьи? В базе R вы могли бы сделать:

authors <- unique(articles$author)
reviewers <- unique(articles$reviewer)
> authors[authors %in% reviewers]
[1] "user2" "user3"

, но как мы можем сделать это в точке обзора?

Ответы [ 3 ]

4 голосов
/ 29 октября 2019

Мне кажется, что ответ, вероятно, будет в dplyr, и я уточнил свой подход до:

articles %>% 
  semi_join((.), 
    by=c("author"="reviewer")) %>% 
  select(author) %>%
  distinct
# A tibble: 2 x 1
  author
  <chr> 
1 user2 
2 user3 

Это правильный ответ, и я признаю, что уточнил егонесколько даже во время написания этого. Но есть ли у кого-нибудь альтернативные варианты решения проблемы? Я на самом деле очень доволен, как все сводится, но я немного подумал, поэтому я опубликую его в надежде, что это поможет кому-то еще.

3 голосов
/ 29 октября 2019

Вот решение без объединений.

articles %>%
  filter(author %in% reviewer) %>%
  select(author) %>%
  distinct()
## A tibble: 2 x 1
#  author
#  <chr> 
#1 user2 
#2 user3 
1 голос
/ 29 октября 2019

В base мы можем сделать:

unique(articles$author[articles$author %in% articles$reviewer])

 # [1] "user2" "user3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...