Назначение строки матрицы одному столбцу фрейма данных

У меня есть матрица tf.mnxm и фрейм dfданных and с 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)

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

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

1 ответ

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

    Мой опыт из 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
    

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

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