2016-05-27 2 views
0

У меня есть матрица tf.m NxM и кадр данных df с N строками.
Я хочу представить строку n матрицы столбцу в кадре данных, в той же строке n.Назначьте строку матрицы одному столбцу фрейма данных

library("tm") 
ftfidf <- function(text.d) { 
    txt <- VectorSource(text.d); 
    txt.corpus <- VCorpus(txt, readerControl = list(reader = readPlain, language = "en")); 
revs <- tm_map(txt.corpus, content_transformer(tolower)) 
dtm <- DocumentTermMatrix(revs, control = list(weighting = function(x) weightTfIdf(x, normalize = T),stopwords = TRUE)) 
} 

df<-data.frame(id=c("doc1", "doc2", "doc3"), text=c("hello world", "people people", "happy people")) 
#id   text 
#1 doc1 hello world 
#2 doc2 people people 
#3 doc3 happy people 
tf <- ftfidf(df$text) # a function that gets a DocumentTermMatrix 
tf.m <- as.matrix(tf) 
#Terms 
#Docs  happy  hello people  world 
#1 0.0000000 0.7924813 0.0000000 0.7924813 
#2 0.0000000 0.0000000 0.5849625 0.0000000 
#3 0.7924813 0.0000000 0.2924813 0.0000000 

Если я запускаю это, я получаю 4 больше столбцов в кадре данных

df$tf<-tf.m 
#id   text tf.happy tf.hello tf.people tf.world 
#1 doc1 hello world 0.0000000 0.7924813 0.0000000 0.7924813 
#2 doc2 people people 0.0000000 0.0000000 0.5849625 0.0000000 
#3 doc3 happy people 0.7924813 0.0000000 0.2924813 0.0000000 

Я хотел бы, чтобы это:

#id   text  tf 
#1 doc1 hello world happy  hello people  world 
#      0.0000000 0.7924813 0.0000000 0.7924813 
#2 doc2 people people happy  hello people  world 
#      0.0000000 0.0000000 0.5849625 0.0000000 
#2 doc3 happy people happy  hello people  world 
#      0.7924813 0.0000000 0.2924813 0.0000000 

, чтобы попытаться обучить Knn, основанный на Долгосрочная частота df$tf (если возможно)

knn_model <- knn(train = df$tf[1,], cl = df$id, k=3) 

для запроса ближайших соседей df$id.
Моя цель состоит в том, чтобы запустить этот «как» функцию graphlab питона в R:

knn_model = graphlab.nearest_neighbors.create(df,features=['tf'],label='id') 
+1

Пожалуйста, включите пакеты, используемые в качестве не ясно, откуда 'ftfidf' возникла. – akrun

+0

Я не уверен, что вы хотите. Если новый фрейм данных имеет 6 строк, чередующихся между словом и счетом tfidf? –

ответ

0

Похоже, что вы хотите иметь иерархические показатели. Насколько мне известно, в R. Data.table нет четкого способа сделать это. Назначение ключей, но не истинные индексы, поскольку они являются частью данных, в отличие от pandon pandas, где метаданные (индекс) и данные развязаны. Я предполагаю это из выражения df$tf[1,], что должно вызывать ошибку при измерениях, если df - это data.frame.

Мой опыт работы с R заключается в том, что данные, подобные этому, в большинстве случаев ожидаются в длинном формате, т.е.

id text   tf value 
doc1 hello world happy 0.0000000 
doc1 hello world hello 0.7924813 
doc1 hello world people 0.0000000 
doc1 hello world world 0.7924813 

Это может быть достигнуто с помощью функций расплава в различных упаковках. Иногда у вас есть только одна переменная и один столбец значений. В этом случае функция взаимодействия полезна для создания переменной.

Надеется, что это помогает, и я понял ваш вопрос, готовы сам выяснить, если истинные показатели существуют в R.

Смежные вопросы