преобразование фрейма данных в матрицу в R

Я пытался преобразовать фрейм данных в realRatingMatrix. Но для этого я сначала конвертирую фрейм данных в матрицу, а матрицу в realRatingMatrix. Фрейм данных df содержит 475984 rows и 3 columns.
Column1 - это productID, column2 - это customer names, а column3 содержит rating of the product, заданный соответствующим пользователем. Выполненные шаги:
1. Удаление отсутствующих значений
2. Дедупликация данных
3. Преобразование фрейма данных в матрицу 4. Тестирование матрицы

library(recommenderlab)
sapply(df, function(x) sum(is.na(x)))
# 100 missing values in column2
df <- df[-which(is.na(df$col2) == TRUE), ]
sum(duplicated(df))
# 580 duplicates
df <- df[-which(duplicated(df) == TRUE), ]

# Converting the dataframe into realratingMatrix
df_matrix <- data.matrix(df)

# Testing matrix
str(df_matrix)
df1 <- as.data.frame(df_matrix)

При преобразовании фрейма данных в матрицу я получаю следующее предупреждающее сообщение:
Предупреждающее сообщение: в data.matrix (beer_data): НП введены путем принуждения Теперь, когда я конвертирую созданную матрицу в фрейм данных в моем столбце с именами клиентов (column2) всего 38 записей, остальные - НП.

Может кто-нибудь предложить способ исправить мой код и получить желаемый результат.


person Padmaja Govindaraju    schedule 14.03.2017    source источник
comment
Можете ли вы предоставить имитационные или образцы данных?   -  person Patrick Williams    schedule 16.03.2017


Ответы (1)


В R матрица - это просто вектор, который разбивается в определенных местах для формирования строк и столбцов. Таким образом, все элементы должны быть одного типа. В частности, если у вас есть data.frame с одним столбцом числовых данных и одним столбцом символьных данных, вы не сможете преобразовать его в матрицу. Я не знаю точно, но похоже, что column2 может быть вектором символов.

Обратите внимание, что я ничего не знаю о пакете Recommenderlab.

Пример:

df <- data.frame(col1 = c("A", "B"), col2 = 1:2, stringsAsFactors = F)

data.matrix(df)
#Warning message:
#In data.matrix(df) : NAs introduced by coercion

df
#     col1 col2
#[1,]   NA    1
#[2,]   NA    2
person blakeoft    schedule 16.03.2017