我的数据不整齐,如下例所示:
label <- c("a", "a.1", "2.a", "b", "c")
values <- c(10, 11, 12, 13, 14)
df1 <- data.frame(label, values)
df1
输出如下:
label values
1 a 10
2 a.1 11
3 2.a 12
4 b 13
5 c 14
我需要对包含不同位置的字母的部分匹配求和,以便获得以下输出:
letter sum
1 a 33
2 b 12
3 c 14
这不是一个简单的分割,因为“字母”(字符串)可以位于值中的任何位置。关于这个主题有什么想法吗?预先感谢。
使用
stringr::str_extract()
提取并按字母分组:
library(dplyr)
library(stringr)
df1 %>%
group_by(letter = str_extract(label, "[a-z]")) %>%
summarize(sum = sum(values))
结果:
# A tibble: 3 × 2
letter sum
<chr> <dbl>
1 a 33
2 b 13
3 c 14
怎么样:
df2 <- df1 %>%
mutate(letter = str_remove_all(label, "[^[:alpha:]]")) %>%
summarise(.by = letter, sum = sum(values))
# ----------
> df2
letter sum
1 a 33
2 b 13
3 c 14