如何获取包含某个特征的文档的百分比
How to get the percentage of documents that contain a feature(s)
我正在使用此解决方案 () 查找包含我的数据集中一组特征中的任何一个特征的文档数量。只要文档包含任何一个单词,我就希望它 return TRUE.
我让它工作了,但它只在某些时候工作,我不明白为什么。删除或添加单词有时有效,但有时无效。这是我使用的代码(复合词组在dfm中已经是“tokens_compound”)
thetarget <- c("testing", "test", "example words", "example")
df <- data.frame(docname = docnames(dfm),
Year = docvars(dfm, c("Year")),
contains_target = rowSums(dfm[, thetarget]) > 0,
row.names = NULL)
我有时会遇到错误
Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 'rowSums':
Subscript out of bounds
TIA
编辑(创建 table 显示包含任何目标词的文档的年份和数量的脚本):
df2 <- df %>%
mutate_if(is.logical, as.character) %>%
filter(!str_detect(contains_target, "FALSE")) %>%
group_by(Year) %>%
summarise(n = n())
您收到错误是因为在您创建的某些 dfm 对象中,并非 thetarget
中的所有特征都在您创建的对象 dfm
中。
这里有一个方法可以避免这种情况,使用 docfreq()
:
library("quanteda")
## Package version: 3.1.0
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
thetarget <- c("nuclear", "congress", "economy", "_not_a_feature_")
dfmat <- tokens(data_corpus_inaugural) %>%
tokens_select(thetarget) %>%
dfm()
docfreq(dfmat) / ndoc(dfmat)
## economy congress nuclear
## 0.52542373 0.49152542 0.08474576
要得到题目中的data.frame:
df <- data.frame(
docname = docnames(dfmat),
Year = docvars(dfmat, c("Year")),
contains_target = as.logical(rowSums(dfmat)),
row.names = NULL
)
head(df)
## docname Year contains_target
## 1 1789-Washington 1789 TRUE
## 2 1793-Washington 1793 FALSE
## 3 1797-Adams 1797 TRUE
## 4 1801-Jefferson 1801 TRUE
## 5 1805-Jefferson 1805 FALSE
## 6 1809-Madison 1809 TRUE
我正在使用此解决方案 (
我让它工作了,但它只在某些时候工作,我不明白为什么。删除或添加单词有时有效,但有时无效。这是我使用的代码(复合词组在dfm中已经是“tokens_compound”)
thetarget <- c("testing", "test", "example words", "example")
df <- data.frame(docname = docnames(dfm),
Year = docvars(dfm, c("Year")),
contains_target = rowSums(dfm[, thetarget]) > 0,
row.names = NULL)
我有时会遇到错误
Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 'rowSums':
Subscript out of bounds
TIA
编辑(创建 table 显示包含任何目标词的文档的年份和数量的脚本):
df2 <- df %>%
mutate_if(is.logical, as.character) %>%
filter(!str_detect(contains_target, "FALSE")) %>%
group_by(Year) %>%
summarise(n = n())
您收到错误是因为在您创建的某些 dfm 对象中,并非 thetarget
中的所有特征都在您创建的对象 dfm
中。
这里有一个方法可以避免这种情况,使用 docfreq()
:
library("quanteda")
## Package version: 3.1.0
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
thetarget <- c("nuclear", "congress", "economy", "_not_a_feature_")
dfmat <- tokens(data_corpus_inaugural) %>%
tokens_select(thetarget) %>%
dfm()
docfreq(dfmat) / ndoc(dfmat)
## economy congress nuclear
## 0.52542373 0.49152542 0.08474576
要得到题目中的data.frame:
df <- data.frame(
docname = docnames(dfmat),
Year = docvars(dfmat, c("Year")),
contains_target = as.logical(rowSums(dfmat)),
row.names = NULL
)
head(df)
## docname Year contains_target
## 1 1789-Washington 1789 TRUE
## 2 1793-Washington 1793 FALSE
## 3 1797-Adams 1797 TRUE
## 4 1801-Jefferson 1801 TRUE
## 5 1805-Jefferson 1805 FALSE
## 6 1809-Madison 1809 TRUE