запись первой строки (заголовков столбцов) в вектор - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть матрица, которую я привел из realRatingMatrix в комплекте Recommenderlab в R. Данные содержат прогнозы оценок от 0 до 1 для ряда продуктов.

Матрица должна содержать номера клиентов вдоль строк (строка 2 вниз), чтобы заголовок столбца 1 был меткой строки, и идентификаторы продуктов вдоль столбцов в первой строке, начиная со столбца 2 и далее. Проблема, с которой я сталкиваюсь, заключается в том, что когда я приводлю матрицу, структура данных становится грязной:

РЕДАКТИРОВАТЬ: Ссылка на репозиторий Github www.github.com / APBuchanan / Recommenderlab-модель

str(wsratings)
 num [1:43, 1:319] 0.192 0.44 0.262 0.161 0.239 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:319] "X011211" "X014227" "X014229" "X014235" ...

Первые ячейки wsratings [1,1] должны быть помечены как «CustomerNumber», а остальные столбцы в строке 1 должны содержать данные, которые в настоящее время хранятся в указанном выше $: chr, но должны отображаться как отдельные переменные в матрица.

Из приведенного ниже кода вы увидите, что я пытался это сделать, вставив данные в два вектора, которые затем я могу вызвать в функции dimnames, но я что-то не так:

   setwd("location to pull in data")
#look at using XLConnect package to link straight to excel workbook
library(recommenderlab)
library(xlsx)
library(tidyr)
library(Matrix)
#library(stringer)
data=read.csv("WS1 & WS2 V3.csv",header=TRUE,row.names=1)
#remove rows where number of purchases is <10
df=data[rowSums(data[-1])>=10,]
df<-as.matrix(df)
data.matrix=as(df,"binaryRatingMatrix")
#image(data.matrix)
model=Recommender(data.matrix,method="UBCF")
predictions<-predict(model,data.matrix,n=5)
set.seed(100)
evaluation<-evaluationScheme(data.matrix,method="split",train=0.5,given=5)
Rec.ubcf <- Recommender(getData(evaluation, "train"), "UBCF")
predict.ubcf<-predict(Rec.ubcf,getData(evaluation,"known"),type="topNList")
pred.ubcfratings<-predict(Rec.ubcf,getData(evaluation,"known"),type="ratings")
error.ubcf<-calcPredictionAccuracy(predict.ubcf,getData(evaluation,"unknown"),given=5)
setwd("Location to output data from model")
wsratings<-as(pred.ubcfratings,"matrix")
ratingrows<-c(evaluation@runsTrain)

где я позвонил colnames2<-c(wsratings[1,2:ncol(wsratings)]) Я ожидаю, что данные из столбца 2 в последний столбец в строке 1 будут считаны в вектор. Но когда я печатаю результаты, они также включают в себя информацию о рейтинге, а это не то, что мне нужно.

ratingrows<-c(evaluation@runsTrain) содержит номера клиентов, которые я хочу вставить ниже метки строки «CustomerNumber».

Я предполагаю, что есть способ разобраться в этом с пакетом tidyr, но не очень знаком с ним. Если кто-нибудь может дать какой-нибудь совет о том, как я могу все это почистить, я был бы очень признателен.

1 Ответ

0 голосов
/ 26 апреля 2018

Итак, с данными, которые вы дали, я нашел решение здесь.

Вы сказали: " Мне нужно извлечь номера клиентов из тестового разделения данных и поместить их в первый столбец матрицы - это моя главная проблема ". Способ извлечь это: colnames(wsratings) или dimnames(wsratings)[[2]].

Когда у вас есть этот вектор (длина 320), вы хотите «перетащить его в первый столбец». Вы запрашиваете cbind(), но длина данных, которые вы хотите связать, содержит 43 строки. Вы не можете связать их вместе, потому что длина двух элементов не одинакова или кратна друг другу .

Если у вас есть полный набор данных и их длина совпадает, тогда код будет:

customerid <-c("CustomerName", evaluation@runsTrain[[1]])
wsratings <- cbind(customerid, wsratings)

Это то, что я собрал, вы хотите, и это дает мне следующее:

enter image description here

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