dfm 对象 R 中的分隔字符



all,

我已经从 R 中的quanteda导入了 sotu 语料库。我对 dfm 对象有点陌生,想要将doc_id列分开,以便为我提供一个nameyear列。如果这是一个 tibble,则此代码有效:

library(quanteda)
library(quanteda.corpora)
library(tidyverse)
sotu <- as_tibble(data_corpus_sotu)
sotusubsetted <- sotu %>%
separate(doc_id, c("name","year"),"-")

但是,由于我是 dfm 和正则表达式的新手,因此我不确定如果我将数据加载为:

library(quanteda)
library(quanteda.corpora)
library(tidyverse)
sotu <- corpus(data_corpus_sotu)
sotudfm <- dfm(sotu)

是否有一些等效的方法可以使用 dfm 对象执行此操作?

最安全的方法也适用于任何核心量化对象,这意味着同样适用于语料库、令牌或 dfm 对象。 这些涉及使用访问器函数,而不是直接寻址语料库或 dfm 对象的内部,强烈建议不要这样做。 您可以这样做,但如果更改这些对象结构,您的代码将来可能会中断。 此外,我们的访问器函数通常也是最有效的方法。

对于此任务,您希望使用docnames()函数或访问文档 ID,这适用于语料库和 dfm。

library("quanteda")
## Package version: 2.1.2
data("data_corpus_sotu", package = "quanteda.corpora")
data.frame(doc_id = docnames(data_corpus_sotu[1:5])) %>%
tidyr::separate(doc_id, c("name", "year"), "-")
##         name  year
## 1 Washington  1790
## 2 Washington 1790b
## 3 Washington  1791
## 4 Washington  1792
## 5 Washington  1793
data.frame(doc_id = docnames(dfm(data_corpus_sotu[1:5]))) %>%
tidyr::separate(doc_id, c("name", "year"), "-")
##         name  year
## 1 Washington  1790
## 2 Washington 1790b
## 3 Washington  1791
## 4 Washington  1792
## 5 Washington  1793

您也可以从"总统"docvar字段和"日期"中获取以下内容:

data.frame(
name = data_corpus_sotu$President,
year = lubridate::year(data_corpus_sotu$Date)
) %>%
head()
##         name year
## 1 Washington 1790
## 2 Washington 1790
## 3 Washington 1791
## 4 Washington 1792
## 5 Washington 1793
## 6 Washington 1794

创建于 2021-02-13 由 reprex 软件包 (v1.0.0)

以下代码将完全按照您的要求执行,尽管它可能会破坏 quanteda 中的一些操作,这些操作将在sotudfm@docvars中查找docid_,存储文档关系数据的数据帧。例如,它将按sotudfm@Dimnames$docs破坏任何过滤,这是列出文档维度名称的地方。

sotudfm@docvars <- sotudfm@docvars %>% separate(col = docid_, c("name","year"),"-")
> sotudfm@docvars %>% as_tibble()
# A tibble: 241 x 10
docname_         name       year  segid_ FirstName President  Date       delivery type  party      
<chr>            <chr>      <chr>  <int> <chr>     <chr>      <date>     <fct>    <fct> <fct>      
1 Washington-1790  Washington 1790       1 George    Washington 1790-01-08 spoken   SOTU  Independent
2 Washington-1790b Washington 1790b      1 George    Washington 1790-12-08 spoken   SOTU  Independent
3 Washington-1791  Washington 1791       1 George    Washington 1791-10-25 spoken   SOTU  Independent
4 Washington-1792  Washington 1792       1 George    Washington 1792-11-06 spoken   SOTU  Independent
5 Washington-1793  Washington 1793       1 George    Washington 1793-12-03 spoken   SOTU  Independent
6 Washington-1794  Washington 1794       1 George    Washington 1794-11-19 spoken   SOTU  Independent
7 Washington-1795  Washington 1795       1 George    Washington 1795-12-08 spoken   SOTU  Independent
8 Washington-1796  Washington 1796       1 George    Washington 1796-12-07 spoken   SOTU  Independent
9 Adams-1797       Adams      1797       1 John      Adams      1797-11-22 spoken   SOTU  Federalist 
10 Adams-1798       Adams      1798       1 John      Adams      1798-12-08 spoken   SOTU  Federalist 

以下是最终对我有用的代码:

sotudfm@docvars <- sotudfm@docvars %>% 
separate(col = docname_, c("name","year"),"-")

这在我跑步时保持doc_id完好无损

head(sotudfm, 10)

看来docid_docname_是相同的。

相关内容

  • 没有找到相关文章

最新更新