计算 r 中的文本数量

count the number of text in r

我有一个像 df 这样的数据集。我想计算每个 bars_by_foo 的文本出现次数并创建 my.column。非常感谢。

 data <- data.frame(foo=c(1, 1, 1, 2, 2, 3, 3, 3), bar=c('a', 'a', 'b', 'a', 'b', 'b', 'c', 'd'))
data
agg <- aggregate(bar~foo, data = data, paste0, collapse="")
df <- merge(data, agg, by = "foo", all = T)
colnames(df) <- c(colnames(data), "bars_by_foo") # optional
df

预期答案

 foo bar bars_by_foo  my.column
   1   a         aab     a(2), b(1)
   1   a         aab     a(2), b(1)
   1   b         aab     a(2), b(1)
   2   a          ab     a(1), b(1)
   2   b          ab     a(1), b(1)
   3   b         bcd     b(1), c(1), d(1)
   3   c         bcd     b(1), c(1), d(1)
   3   d         bcd     b(1), c(1), d(1)

我们可以贴一个群

  1. add_count - 根据 'foo'、'bar' 列创建频率列
  2. 按 'foo' - 'bars_by_foo'
  3. 分组后将 'bar' 个元素粘贴在一起
  4. 使用sprintf将'bar'、'n'列格式化为一个字符串,得到unique元素和pastetoString
library(dplyr)
library(stringr)
data %>%
    add_count(foo, bar) %>%
    group_by(foo) %>%
    mutate(bars_by_foo = str_c(bar, collapse=""),
      my.column = toString(unique(sprintf('%s(%d)', bar, n)))) %>%
    ungroup

-输出

# A tibble: 8 x 5
    foo bar       n bars_by_foo my.column       
  <dbl> <chr> <int> <chr>       <chr>           
1     1 a         2 aab         a(2), b(1)      
2     1 a         2 aab         a(2), b(1)      
3     1 b         1 aab         a(2), b(1)      
4     2 a         1 ab          a(1), b(1)      
5     2 b         1 ab          a(1), b(1)      
6     3 b         1 bcd         b(1), c(1), d(1)
7     3 c         1 bcd         b(1), c(1), d(1)
8     3 d         1 bcd         b(1), c(1), d(1)