R语言 如何呈现多项选择题中以不同方式呈现的每个选项的出现频率?

jm81lzqq  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(171)

我有这个示例 Dataframe (我的真实的 Dataframe 更大,这个 Dataframe 包括了我在大 Dataframe 中遇到的所有情况)

df = data.frame(ingridents = c('bread', 'BREAD', 'Bread orange juice',
                               'orange juice', 'Apple', 'apple bread, orange juice',
                               'bread Apple ORANGE JUICE'),
                Frequency = c(10,3,5,4,2,3,1) )

在此df Dataframe 中,我们可以看到:
成分bread被写成bread、BREAD和Bread(单独或与其他答案一起)。2成分apple也是如此。
成分橙子juice有多种形式,在一组回答中有一个逗号,而在另一组回答中没有逗号。另外,我希望R能识别orange juice表达的整体,而不是单独的orangejuice
目标是创建另一个包含这3个成分及其频率的 Dataframe ,如下所示:

ingridents Frequency
1        BREAD        22
2 ORANGE JUICE        13
3        APPLE         6

我怎样才能在R上编写一个算法,使他能够识别出每个React的总频率(无论它是大写字母还是小写字母,或者它是由两个词组成的表达式,如橙子)?

px9o7tmv

px9o7tmv1#

下面是一种方法。首先,我们要做一些字符串预处理(例如,所有字符串都是大写,去掉逗号,并连接juice),然后按空格拆分并求和:

library(tidyr)
library(dplyr)
library(stringr)

df |>
  mutate(ingridents = ingridents |>
                      toupper() |>
                      str_remove_all(",") |>
                      str_replace_all("ORANGE JUICE", "ORANGE_JUICE")) |>
  separate_rows(ingridents, sep = " ") |>
  count(ingridents, wt = Frequency) |>
  arrange(desc(n)) |>
  mutate(ingridents = str_replace_all(ingridents, "ORANGE_JUICE", "ORANGE JUICE"))

输出量:

# A tibble: 3 × 2
  ingridents       n
  <chr>        <dbl>
1 BREAD           22
2 ORANGE JUICE    13
3 APPLE            6

相关问题