Что сравнивает оператор% in%, если я сравниваю 2 кадра данных? - PullRequest
0 голосов
/ 21 декабря 2018

Итак, у меня есть

df=data.frame(age=c(10,12,12,13,13,10), name=c('Maria','anders','anders','per','johanna','Maria'))

dups=df[duplicated(df),] 

Что R делает, когда я бегу df %in% dups

Вывод: FALSE FALSE

Я понимаю, например, если я бегу df$name %in% dups$name

Вывод: TRUE TRUE TRUE FALSE FALSE TRUE

, который сравнивает каждый name из df с name из dups и проверяет, найден ли name хотя бы один разна dups.Я бы предположил, что df %in% dups будет проверять каждую строку df против каждой строки dups, но это не так.

1 Ответ

0 голосов
/ 21 декабря 2018

Когда %in% применяется к фреймам данных, выполняется сравнение по столбцам .

Например,

df %in% df["age"]
# [1]  TRUE FALSE

сравнивает каждый столбец в df со столбцом в фрейме данных из одного столбца df["age"].Поскольку столбец age идентичен в обоих фреймах данных, первое значение равно TRUE.


Для сравнения по строкам можно использовать следующее (сложное) команда:

sapply(seq(nrow(df)),
       function(i1) any(as.logical(rowSums(sapply(seq(nrow(dups)),
                                                  function(i2) df[i1, ] == dups[i2, ])))))
# [1]  TRUE  TRUE  TRUE FALSE FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...