emoji_pairs() returns a tidy edge list of the emoji that appear together
in the same document: one row per pair with the number of documents in which
the pair co-occurs. By default every row of data is a document; give
doc_id to treat all rows sharing an id (a conversation, a user, a day) as
one document. The output mirrors widyr::pairwise_count() (item1,
item2, n) and pipes straight into
igraph::graph_from_data_frame(), tidygraph or ggraph.
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.- doc_id
Optional unquoted column identifying documents. Rows sharing a value are treated as one document. Default: each row is a document.
The result has a row per pair, so it grows with the square of the distinct emoji in a document: a day or a conversation is cheap, and pooling a whole corpus under one id is not. 800 distinct emoji in one document is 319,600 pairs and a few seconds; 3790 would be 7.2 million.
- directed
If
TRUE, pairs are ordered by first appearance: a document where the tears-of-joy emoji appears before the heart-eyes emoji counts towards (tears-of-joy, heart-eyes), not the reverse. DefaultFALSE(unordered pairs, withitem1sorted beforeitem2).- sort
If
TRUE(default), sort by descendingn(ties broken byitem1,item2so the order is deterministic).FALSEsorts byitem1thenitem2instead – still a fixed order, computed in the C locale, not the order the pairs happened to be counted in.
Value
A tibble with columns item1, item2 and n. Empty (but typed)
when no document contains two distinct emoji.
Details
Glyphs are canonicalised through the package's codepoint key, so qualified
and unqualified forms of the same emoji (with/without U+FE0F) count as one
node. Pairs are between distinct emoji: repeats of the same emoji in a
document do not pair with themselves (see emoji_cooccurrence() for the
diagonal).
See also
emoji_cooccurrence() for the same counts with an optional
diagonal; emoji_ngrams() for consecutive sequences.
Examples
df <- data.frame(text = c("fun \U0001f602\U0001f60d",
"\U0001f602\U0001f60d\U0001f389",
"just \U0001f602"))
emoji_pairs(df, text)
#> # A tibble: 3 × 3
#> item1 item2 n
#> <chr> <chr> <int>
#> 1 😂 😍 2
#> 2 🎉 😂 1
#> 3 🎉 😍 1
emoji_pairs(df, text, directed = TRUE)
#> # A tibble: 3 × 3
#> item1 item2 n
#> <chr> <chr> <int>
#> 1 😂 😍 2
#> 2 😂 🎉 1
#> 3 😍 🎉 1