Categorise each row by the emoji categories it contains
Source:R/emoji-categorize.R
emoji_categorize.Rdemoji_categorize() keeps the rows of data that contain emoji and adds a
.emoji_category column listing the distinct Unicode categories present in
that row (for example "Smileys & Emotion"), separated by | when a row spans
more than one category.
Arguments
- data
A data frame or tibble containing a text column. Grouped data frames are accepted. The verbs that work a row at a time (adding columns, or keeping and expanding rows) carry the grouping through to their result, as
dplyr::mutate()anddplyr::filter()do. The verbs that pool across rows – the counts, the co-occurrence edge lists, the time series – warn that they ignore the grouping and return one corpus-wide answer.- text
The text column to scan, supplied unquoted. Any atomic column is accepted and read as character, so a
factorworks and a numeric,Dateor logical one simply contains no emoji. A list column – or a data-frame column – is refused rather than coerced, because coercing one deparses it and the emoji found would be in the code rather than in your data. What counts as an emoji is the same in every verb; see the Detection section of tidyEmoji for the one case that surprises people, code points that are emoji only when they carryU+FE0F.
Value
data, as a tibble, filtered to the rows containing at least one
emoji, with an added .emoji_category column. That column is NA for a
row whose emoji are all absent from the reference table.
Details
A row is kept because it contains an emoji, not because that emoji could be
categorised. If none of a row's emoji is in the reference table the row is
kept with .emoji_category set to NA. Dropping it would silently shrink
the corpus, and by exactly the rows a user whose Unicode coverage is behind
most needs to see.
Three different things reach that NA, and only the first is a catalogue
question:
A zero-width-joiner sequence newer than your installed emoji package, since detection is grapheme-aware and does not require the sequence to be catalogued. Use
emoji_provenance()to check which catalogue you are matching against; upgradingemojifixes it.An invalid regional-indicator pair such as
U+1F1FD U+1F1FD. It is a well-formed grapheme cluster and no catalogue will ever contain it, so no upgrade helps.A non-RGI ZWJ join – components joined in a combination Unicode does not recommend. These arrive as separate occurrences rather than one.
See the Detection section of tidyEmoji for both false-positive cases.
See also
emoji_type() for the smaller functional vocabulary recoded from
the same group and subgroup, and emoji_faceness() for the face share it
reduces to; emoji_frequency() for per-glyph counts carrying group;
category_unicode_crosswalk for the ten categories themselves.
Examples
df <- data.frame(text = c("smile \U0001f600",
"flag \U0001f3c1\U0001f600",
"nothing"))
emoji_categorize(df, text)
#> # A tibble: 2 × 2
#> text .emoji_category
#> <chr> <chr>
#> 1 smile 😀 Smileys & Emotion
#> 2 flag 🏁😀 Flags|Smileys & Emotion