Слияние с использованием внутреннего соединения в R - PullRequest
0 голосов
/ 28 октября 2018

В приведенном ниже коде для объединения двух таблиц с использованием Inner Join я получаю сообщение об ошибке

table_Left<-matrix(c(1:6,rep("Toaster",3),rep("Radio",3)),ncol = 2)
colnames(table_Left)<-c("Customer_ID","Product")
table_Left<-as.table(table_Left)
table_Left
table_Right<-matrix(c(2,4,6,rep("Alabama",2),"Ohio"),ncol = 2)
colnames(table_Right)<-c("Customer_ID","State")
table_Right<-as.table(table_Right)
table_Right
merge(x=table_Left, y=table_Right, by="Customer_ID")

Ошибка: ошибка в fix.by (by.x, x): 'by' должен указывать однозначно действительныйколонка

Посоветуйте пожалуйста исправление

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю, что ваша проблема связана с путаницей вокруг термина "стол".Фреймы данных - очень распространенный класс объектов при использовании R для науки о данных.И на общем языке их часто называют «таблицами».Однако используемая вами функция as.table() не имеет никакого отношения к фреймам данных: as.table() создает таблицы сопряженности (что совсем не то, что вам нужно).

Самый эффективный способ создания2 фрейма данных (или «таблицы»), которые вам нужны, это создать их напрямую с помощью функции data.frame():

df_Left <- data.frame(
  Customer_ID = 1:6,
  Product = c(rep("Toaster", 3), rep("Radio", 3))
)

df_Left

      Customer_ID Product
    1           1 Toaster
    2           2 Toaster
    3           3 Toaster
    4           4   Radio
    5           5   Radio
    6           6   Radio

df_Right <- data.frame(
  Customer_ID = c(2, 4, 6),
  State = c(rep("Alabama", 2), "Ohio")
)

df_Right

      Customer_ID   State
    1           2 Alabama
    2           4 Alabama
    3           6    Ohio

И тогда ваш код с функцией merge() будет работать:

merge(x = df_Left, y = df_Right, by = "Customer_ID")

  Customer_ID Product   State
1           2 Toaster Alabama
2           4   Radio Alabama
3           6   Radio    Ohio

Теперь ваш код начался с создания матриц.Если у вас есть веская причина в вашей ситуации использовать матрицы, merge() также будет работать:

Если вы посмотрите файл справки для функции merge()?merge), вы будетесм .:

слияние (x, y, ...)

x, y: кадры данных или объекты, которые должны быть приведены к одному.

И матрицы могут быть приведены к фреймам данных без создания каких-либо проблем с вашими данными.Так что вы также можете сделать:

ma_Left <- matrix(
  c(1:6, rep("Toaster", 3), rep("Radio", 3)), ncol = 2
)

colnames(ma_Left) <- c("Customer_ID", "Product")

ma_Right <- matrix(
  c(2, 4, 6, rep("Alabama", 2), "Ohio"), ncol = 2
)

colnames(ma_Right) <- c("Customer_ID", "State")

merge(x = ma_Left, y = ma_Right, by = "Customer_ID")

  Customer_ID Product   State
1           2 Toaster Alabama
2           4   Radio Alabama
3           6   Radio    Ohio
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...