Я думаю, что ваша проблема связана с путаницей вокруг термина "стол".Фреймы данных - очень распространенный класс объектов при использовании 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