【问题标题】:find partially similar string elements and summarize the data查找部分相似的字符串元素并汇总数据
【发布时间】:2018-10-23 19:40:49
【问题描述】:

我有一个数据集,我想根据(比如说)前三个字符来总结我的数据。实际上,连接列中具有相同 3 个首字母的行。例如:

df
title freq
ACM100    3
ACM200    2
ACM300    2
MAT11     1
MAT21     2
CMP00     3
CMP10     3

我想在标题前3个字符的标题上总结数据库并统计频率。

result:
title  freq
ACM    7
MAT    3
CMP    6

如果能在 R 中帮助我,将不胜感激。

【问题讨论】:

  • 您的第一步是创建新字段,例如substr(df$title, 1, 3),然后对其进行常规聚合/汇总。有很多关于 SO(包括 @CalumYou 刚刚发布的 group_by(letters) %>% summarise(...))关于组聚合的 Q/A,以及从 base-R 到 dplyrdata.table 的多种类型的解决方案,具体取决于您当前的工具包。

标签: r regex summary


【解决方案1】:

我们可以使用separate将字母拆分成组,然后group_bysummarise得到想要的结果。

library(tidyverse)
df <- read_table2(
"title freq
ACM100    3
ACM200    2
ACM300    2
MAT11     1
MAT21     2
CMP00     3
CMP10     3"
)
df %>%
  separate(title, c("letters", "numbers"), sep = 3) %>%
  group_by(letters) %>%
  summarise(freq = sum(freq))
#> # A tibble: 3 x 2
#>   letters  freq
#>   <chr>   <int>
#> 1 ACM         7
#> 2 CMP         6
#> 3 MAT         3

reprex package (v0.2.0) 于 2018 年 10 月 23 日创建。

【讨论】:

    【解决方案2】:

    您可以将aggregatetransform 一起使用

    aggregate(freq ~ title, transform(df, title = substr(title, 1, 3)), sum)
    #   title freq
    # 1   ACM    7
    # 2   CMP    6
    # 3   MAT    3
    

    【讨论】:

      【解决方案3】:

      因为您用 标记了这个问题并且还没有收到data.table 的答案,所以这里还有一个选项供您选择

      library(data.table)
      setDT(df)
      df[, .(freq = sum(freq)), by = .(title = sub("[0-9]+", "", title))]
      #   title freq
      #1:   ACM    7
      #2:   MAT    3
      #3:   CMP    6
      

      【讨论】:

        【解决方案4】:

        这行得通。

        df$firstletters <- substr(df$title,1,3)
        df.grouped <- df %>% group_by(firstletters)
        df.summarized <- df.grouped %>% summarize(count = sum(freq))
        > df.summarized
        # A tibble: 3 x 2
          firstletters count
          <chr>        <int>
        1 ACM              7
        2 CMP              6
        3 MAT              3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-03-22
          • 1970-01-01
          • 2014-09-04
          • 1970-01-01
          • 2021-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多