【问题标题】:count the number of text in r计算 r 中的文本数量
【发布时间】:2021-09-17 06:55:26
【问题描述】:

我有一个像 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)

【问题讨论】:

    标签: r tidyverse tidyr data-manipulation


    【解决方案1】:

    我们可以通过粘贴来分组

    1. add_count - 根据 'foo'、'bar' 列创建频率列
    2. 按“foo”-“bars_by_foo”分组后将“bar”元素粘贴在一起
    3. 使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2018-10-26
      相关资源
      最近更新 更多