Р: в чем разница между ALL и all в merge()?

Пробовал пример в https://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html. Затем я обнаружил, что когда мы установили ALL = TRUE и all = TRUE в качестве параметра merge(), я просто получил другой результат (у одного 6 строк, а у другого 7 строк). Что случилось? Может ли кто-нибудь дать несколько советов? Спасибо.

> authors <- data.frame(
+     surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
+     nationality = c("US", "Australia", "US", "UK", "Australia"),
+     deceased = c("yes", rep("no", 4)))
> books <- data.frame(
+     name = I(c("Tukey", "Venables", "Tierney",
+                "Ripley", "Ripley", "McNeil", "R Core")),
+     title = c("Exploratory Data Analysis",
+               "Modern Applied Statistics ...",
+               "LISP-STAT",
+               "Spatial Statistics", "Stochastic Simulation",
+               "Interactive Data Analysis",
+               "An Introduction to R"),
+     other.author = c(NA, "Ripley", NA, NA, NA, NA,
+                      "Venables & Smith"))

> m1<-merge(authors, books, by.x = "surname", by.y = "name", ALL = TRUE)
> m1
   surname nationality deceased                         title other.author
1   McNeil   Australia       no     Interactive Data Analysis         <NA>
2   Ripley          UK       no            Spatial Statistics         <NA>
3   Ripley          UK       no         Stochastic Simulation         <NA>
4  Tierney          US       no                     LISP-STAT         <NA>
5    Tukey          US      yes     Exploratory Data Analysis         <NA>
6 Venables   Australia       no Modern Applied Statistics ...       Ripley
> m2<-merge(authors, books, by.x = "surname", by.y = "name", all = TRUE)
> m2
   surname nationality deceased                         title     other.author
1   McNeil   Australia       no     Interactive Data Analysis             <NA>
2   R Core        <NA>     <NA>          An Introduction to R Venables & Smith
3   Ripley          UK       no            Spatial Statistics             <NA>
4   Ripley          UK       no         Stochastic Simulation             <NA>
5  Tierney          US       no                     LISP-STAT             <NA>
6    Tukey          US      yes     Exploratory Data Analysis             <NA>
7 Venables   Australia       no Modern Applied Statistics ...           Ripley

person eve2ada    schedule 12.04.2017    source источник


Ответы (1)


Причина, по которой вы наблюдаете такое поведение, заключается в том, что ALL не является допустимым аргументом для merge (это нижний регистр all). Если вы укажете ALL = TRUE, merge не выдаст ошибку, поскольку позволяет использовать дополнительные аргументы через .... В вашем случае аргумент игнорируется. Поэтому, когда вы устанавливаете ALL = TRUE, merge просто использует значение по умолчанию, то есть all = FALSE.

person ikop    schedule 12.04.2017
comment
Спасибо за ответ. Я также рассматривал эту проблему, но я не видел никаких предупреждений о том, что ALL=TRUE не используется или игнорируется, поэтому я предположил, что произошло что-то еще. - person eve2ada; 12.04.2017