r команда слияния, возвращающая список, а не фрейм данных - PullRequest
0 голосов
/ 13 марта 2020

Вчера слияние продолжало возвращать список вместо фрейма данных, отделяя каждый столбец как отдельный элемент в списке. Когда я попробовал команду соединения из plyr, она заставляла все, кроме одного из моих столбцов, не соединяемых по столбцам, принимать одинаковое значение в каждой строке. Сегодня команда слияния сработала, но я волнуюсь, если это когда-нибудь случится снова. Я не знаю, как это исправить. Кто-нибудь когда-нибудь слышал об этой проблеме? РЕДАКТИРОВАТЬ: он больше не работает снова.

Я пытаюсь объединить 2 кадра данных с помощью команды слияния. Фреймы данных - это tab2 и tab 4, и они имеют 4 общих столбца, которыми я пытаюсь объединить. В Tab2 есть один дополнительный столбец, col5, а в tab4 есть несколько дополнительных столбцов с именами sum1, ... sum7.

Эта команда:

temp <- merge(tab2, tab4, by = c("year", "month", "n_make", "n_mod"), all = TRUE, sort = FALSE)

вызвала ошибку: Ошибка слияния (tab2, tab4, by = c ("year", "month", "n_make", "n_mod"),: неиспользованные аргументы (by = c ("year", "month", "n_make", "n_mod") ), все = ИСТИНА, сортировка = ЛОЖЬ)

Когда я удалил часть «по», ошибка была та же, только упоминание частей «все» и «сортировка». Когда я удалил все и сортировать parts:

tmp <- merge(tab2, tab4)

команда прошла, но вместо того, чтобы дать мне фрейм данных, она дала мне список, где первым элементом был столбец col_5 из tab2, и в нем было столько же элементов, сколько в tab2 строки. Другие записи были названы в честь всех других моих столбцов, включая слияние по столбцам, и в них было только столько записей, сколько в tab4.

Я был бы очень признателен ЛЮБОЙ информации, которую люди могут дать мне по этой проблеме. не могу рисковать, чтобы это повторилось. Код, который я пишу, должен сочетаться с другим кодом на работе и будет запускаться как минимум ежемесячно, поэтому мне нужно, чтобы он работал постоянно.

Вот команда соединения, которая также не работала:

library(plyr)
tmp <- join(tab2, tab4, type = "full")

РЕДАКТИРОВАТЬ : reproducible example Так как данные являются собственностью, я переписал небольшой пример, и он все еще не работает. Я включаю пакеты, которые я включил на случай, если один из них испортит вещи:

library(RODBC)
library(RPostgres)              
library(DBI)
library(RPostgreSQL)
library(installr)
library(devtools)
library(remotes)
library(dbplyr)
library(dplyr)
# library(dbplot)   # not avaiable for R version 3.6.2
library(ggplot2)
library(modeldb)
library(tidypredict)
library(config)
library(inspectdf)
library(vcdExtra)
library(vcd)
library(janitor)
library(plyr)
library(openintro)
library(lattice)

year = c(2015, 2015, 2015, 2016, 2016, 2016, 2017, 2017, 2017, 2018, 2018, 2018, 2019, 2019, 2019)
month = c(1, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 3, 2, 2, 3)
n_make = c("A", "B", "A", "A", "A", "B", "A", "B", "C", "A", "B", "C", "B", "C", "C")
n_mod = c(7, 8, 7, 7, 9, 8, 7, 8, 6, 7, 8, 6, 8, 6, 5)
col5 = c(24, 38, 92, 41, 63, 19, 14, 8, 56, 73, 80, 13, 21, 42, 66)
t2 <-data.frame(year, month, n_make, n_mod, col5)
head(t2, 15)


year = c(2015, 2015, 2015, 2015, 2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2019, 2000)
month = c(1, 1, 1, 3, 1, 2, 2, 3, 1, 2, 1, 2, 2, 1)
n_make = c("A", "B", "C", "A", "A", "A", "B", "C", "A", "B", "B", "B", "C", "C")
n_mod = c(7, 8, 6, 7, 7, 9, 8, 6, 7, 8,  8, 8, 6, 5)
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
y = c(14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
t4 <- data.frame(year, month, n_make, n_mod, x, y)
head(t4, 14)

# This is producing error messages.
t <- merge(t2, t4, by = c("year", "month", "n_make", "n_mod"), all = TRUE, sort = FALSE) 
t

#This is producing a regular list instead of a dataframe.
t <- merge(t2, t4)
t

1 Ответ

0 голосов
/ 13 марта 2020

Я считаю, что пакет config маскирует команду base merge. После удаления всех выводимых данных и перезапуска R с закомментированным пакетом теперь работает команда слияния.

Забавно, потому что я попробовал base :: merge на тот случай, если проблема была с маскировкой, но это не сработало. .

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