【问题标题】:How do I create a new variable in R if it does not already exist?如果 R 中不存在新变量,如何创建它?
【发布时间】:2020-06-16 19:17:47
【问题描述】:

我目前在 R 中使用 tidytext 来做一些情绪分析。我使用的代码与小插图中列出的代码极为相似。这是给出的示例: https://cran.r-project.org/web/packages/tidytext/vignettes/tidytext.html

library(tidyr)
bing <- get_sentiments("bing")

janeaustensentiment <- tidy_books %>%
  inner_join(bing) %>%
  count(book, index = line %/% 80, sentiment) %>%
  spread(sentiment, n, fill = 0) %>%
  mutate(sentiment = positive - negative)

我已将其调整为在相当短的文本块上使用,使用完全相同的 inner_join %>% spread %>% mutate 进程。问题是我至少有一段文字给我带来了问题。我认为这是因为它根本没有负面情绪。这是错误信息:

x object 'negative' not found
Input 'sentiment' is 'positive - negative'

我认为应该有办法解决这个问题——如果变量不存在,则创建一个变量——但我无法让它工作。我正在考虑类似的事情:

mutate(negative = 0) ifelse(exists())

但我似乎无法弄清楚它是如何工作的。有没有人知道如果它不存在如何创建一个新变量,但如果它不存在则不创建它?或者,或者,如果 tidytext 本身有解决此问题的方法。

编辑 6 月 17 日:我刚刚检查了“传播”之后发生的情况,确实没有“负”变量/列。因此,如果我可以创建一个新变量——当且仅当它不存在——值“0”我可以继续。

【问题讨论】:

  • 你能检查一下- tidy_books %&gt;% inner_join(bing) %&gt;% count(book, index = line %/% 80, sentiment) %&gt;% spread(sentiment, n, fill = 0) %&gt;% colnames后面的列名吗
  • 你能提供一个输入输出的例子吗?谢谢!
  • get_sentiments 是做什么的?它返回什么?
  • 如果您只是创建一个 txt 文件,上面写着“happy happy happy happy”,应该会重现问题。 get_sentiments 只是抓取情绪字典。
  • @akrun 我手动检查了会发生什么。以下是发生的情况:在“展开”时,它会创建一列(正面)而不是两列(正面和负面)。

标签: r dplyr spread tidytext


【解决方案1】:

没有示例数据,很难确定,但我认为您想尝试使用来自complete()。您可以指定要确保拥有所有组合的列,以及用于填充任何缺失数据的值。例如,假设文档 2 缺少其负面情绪:

library(tidyverse)

sentiments <- tibble(
  document    = c(1, 2, 3, 1, 3),
  sentiment   = c("positive", "positive", "positive", "negative", "negative"),
  n           = c(5, 8, 2, 9, 3)
)

sentiments
#> # A tibble: 5 x 3
#>   document sentiment     n
#>      <dbl> <chr>     <dbl>
#> 1        1 positive      5
#> 2        2 positive      8
#> 3        3 positive      2
#> 4        1 negative      9
#> 5        3 negative      3

sentiments %>%
  complete(document, sentiment, fill = list(n = 0))
#> # A tibble: 6 x 3
#>   document sentiment     n
#>      <dbl> <chr>     <dbl>
#> 1        1 negative      9
#> 2        1 positive      5
#> 3        2 negative      0
#> 4        2 positive      8
#> 5        3 negative      3
#> 6        3 positive      2

reprex package (v0.3.0.9001) 于 2020 年 6 月 18 日创建

如果您对文档使用这样的方法,我希望您能够避免遇到的问题并可以继续使用 spread()(或其更新的表亲,pivot_wider()) .

【讨论】:

  • 我一直在尝试使用它,但我无法弄清楚。你到底建议在哪里这样做?我不认为我有这样的文件清单。我在每个文档中计算出来。我意识到如果没有可重复的示例,这很复杂,但是如果您对仅读取“快乐快乐快乐快乐”的内容进行分析,那么情绪列中应该没有“负面”的实例。
猜你喜欢
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多