Вчера слияние продолжало возвращать список вместо фрейма данных, отделяя каждый столбец как отдельный элемент в списке. Когда я попробовал команду соединения из 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