我有一个矩阵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
尝试根据术语频率df$tf
(如果可能)训练一个knn
knn_model <- knn(train = df$tf[1,], cl = df$id, k=3)
查询df$id
的最近邻居。
我的目标是在R中运行这个'like'python graphlab函数:
knn_model = graphlab.nearest_neighbors.create(df,features=['tf'],label='id')
答案 0 :(得分:0)
看起来你想拥有分层索引。据我所知,在R. Data.table中没有明确的方法可以分配键,但不是真正的索引,因为它们是数据的一部分,与python 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中是否存在真正的指数。