查找部分相似的字符串元素并汇总数据

时间:2018-10-23 19:40:50

标签: r regex summary

我有一个数据集,我想基于(假设)前三个字符来汇总我的数据。实际上,将列中具有相同的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中帮助我会很感激。

4 个答案:

答案 0 :(得分:3)

我们可以使用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创建。

答案 1 :(得分:2)

您可以将aggregatetransform一起使用

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

答案 2 :(得分:1)

由于您用标记了此问题,但尚未收到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

答案 3 :(得分:0)

这有效。

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