setdiff (x, y) error: возвращает x вместо значений только в x, а не в y - PullRequest
1 голос
/ 26 мая 2020

Я не уверен, почему intersect() и setdiff() из Шпаргалки по преобразованию данных возвращают мне ошибки. Я просмотрел другие ответы и не нашел ответа. Любая помощь могла бы быть полезна!


Воспроизводимый пример

Я использую library(tidyverse) и library(plyr) (которые, как мне кажется, включены в tidyverse, но, пытаясь выяснить ошибку, я загрузил пакет все равно). Я также использую lubridate для другой части моего кода, поэтому я добавил его. В моих реальных данных у меня есть много избыточных значений в столбце «code» каждой таблицы, поэтому я добавил повторяющиеся значения и передал distinct() по конвейеру, чтобы воспроизвести структуру, которая у меня ниже.

library(tidyverse) 
library(plyr)
library(lubridate)

# x table
x <- tibble(code = c(1,2,2)) %>% 
  distinct(code)

# y table
y <- tibble(code = c(2,3,3)) %>% 
  distinct(code)

intersect(): я хочу использовать intersect() для создания таблицы значений в x, которые также находятся в y: 2. Я обнаружил, что join() работает, но если кто-нибудь может поделиться, почему то, что у меня есть, не возвращает 2, я был бы признателен.

# this produces error message "Length of logical index must be 1 or 2, not 0"
intersect(x, y) 

# but this seems to work and returns a table with `2` which is what I want
intersect_solution <- join(x, y, type = "inner")

setdiff(): Я хочу использовать setdiff() для создания таблицы значений в x, которых нет в y: 1. Я застрял здесь и совершенно не понимаю, почему это не работает.

# this produces all of x: `1` and `2`
setdiff(x, y) 

Изменения в вопросе: В моем коде была опечатка, и я исправил ее. Дальнейшие дополнения ниже:

  • пересечение (left.df, right.df) изменено на пересечение (x, y)
  • setdiff (left.df, right.df) изменено на setdiff (x, y)
  • добавил library(lubridate) в пример, потому что я его использую

1 Ответ

1 голос
/ 26 мая 2020

Когда вы прикрепляете lubridate

library(lubridate)

, отображается

Attache Paket: 'lubridate'

Следующие объекты замаскированы из пакета ': dplyr ':

intersect, setdiff, union

Следующие объекты замаскированы из' package: base ':

date, intersect, setdiff, union

Для доступа к ним все еще из dplyr используйте dplyr::intersect, dplyr::setdiff и dplyr::union.

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