我有一个数据集,我想基于(假设)前三个字符来汇总我的数据。实际上,将列中具有相同的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中帮助我会很感激。
答案 0 :(得分:3)
我们可以使用separate
拆分字母以用作组,然后使用group_by
和summarise
获得所需的结果。
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)
您可以将aggregate
与transform
一起使用
aggregate(freq ~ title, transform(df, title = substr(title, 1, 3)), sum)
# title freq
# 1 ACM 7
# 2 CMP 6
# 3 MAT 3
答案 2 :(得分:1)
由于您用regex标记了此问题,但尚未收到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