我有一个名为“pertanian”的数据框:
DOCS <- c(1:5)
TEXT <- c("tanaman jagung seumur jagung " ,
"tanaman jagung kacang ketimun rusak dimakan kelinci" ,
"ladang diserbu kelinci tanaman jagung kacang ketimun rusak dimakan" ,
"ladang diserbu kelinci tanaman jagung kacang ketimun rusak dimakan" ,
"ladang diserbu kelinci tanaman jagung kacang ketimun rusak ")
pertanian <- data.frame(DOCS , TEXT)
从我创建的数据框,然后我创建一个这样的术语文档频率:
term DOCS 1 DOCS 2 DOCS 3 DOCS 4 DOCS 5
dimakan 0 1 1 1 0
diserbu 0 0 1 1 1
jagung 2 1 1 1 1
kacang 0 1 1 1 1
kelinci 0 1 1 1 1
ketimun 0 1 1 1 1
ladang 0 0 1 1 1
rusak 0 1 1 1 1
seumur 1 0 0 0 0
tanaman 1 1 1 1 1
从上面的术语文档矩阵中,我想制作一个像这样的文档频率:
Term DF
dimakan 3
diserbu 3
jagung 5
kacang 4
kelinci 4
ketimun 4
ladang 3
rusak 4
seumur 1
tanaman 5
我试过这段代码:
myCorpus <- Corpus(VectorSource(pertanian$TEXT))
myCorpus2 <- tm_map(myCorpus, PlainTextDocument)
tdm <- TermDocumentMatrix(myCorpus2)
temp<-inspect(tdm)
colnames(temp) <- paste("DOCS", pertanian$DOCS)
Doc.Freq<-data.frame(apply(temp, 1, sum))
#rename column name
Doc.Freq <- cbind(Term = rownames(Doc.Freq), Doc.Freq)
row.names(Doc.Freq) <- NULL
names(Doc.Freq)[names(Doc.Freq)=="apply.temp..1..sum."] <- "DF"
但是,输出结果产生“术语频率”而不是“文档频率”, 因为术语'jagung'计算为6,文档频率应为5
答案 0 :(得分:5)
这样的东西?
注意:这里我假设您所需的输出有错误,并且5个文档中有4个存在 kacang
$("#test-strong", example).css({"background-color": "#ffe", "border": "5px solid #ccc", "font-size": "30px", "color":"red", "float":"right"});
给出了:
library(tm)
library(dplyr)
v <- Corpus(VectorSource(TEXT))
data.frame(inspect(TermDocumentMatrix(v))) %>%
add_rownames() %>%
mutate(DF = rowSums(.[-1] >= 1)) %>%
select(Term = rowname, DF)
或者你可以这样做:
#Source: local data frame [10 x 2]
#
# Term DF
#1 dimakan 3
#2 diserbu 3
#3 jagung 5
#4 kacang 4
#5 kelinci 4
#6 ketimun 4
#7 ladang 3
#8 rusak 4
#9 seumur 1
#10 tanaman 5
答案 1 :(得分:1)
试试这个:
dd <- strsplit(as.character(TEXT),' ')
> transform(table(unlist(lapply(dd,unique))))
# Var1 Freq
#1 dimakan 3
#2 diserbu 3
#3 jagung 5
#4 kacang 4
#5 kelinci 4
#6 ketimun 4
#7 ladang 3
#8 rusak 4
#9 seumur 1
#10 tanaman 5