我有一张看起来像这样的桌子:
行 | 字符串 | 数量 | 文件 |
---|---|---|---|
1 | W123ABC-1 | 9 | F1 |
2 | W123ABC | 4 | F1 |
3 | W123ABC-3; W123ABC-1; W123ABC | 11 | F2 |
4 | S678DEF-2; S678DEF-3 | 3 | F3 |
5 | D345GHI | 4 | F1 |
6 | D345GHI-5; D345GHI-8 | 7 | F1 |
7 | S678DEF; S678DEF-3; S678DEF-6 | 12 | F3 |
8 | S678DEF-4 | 1 | F2 |
我想对 File 列中每个值的 String 列中包含相同前 7 个符号的所有行的 Number 列中的值求和。
示例字符串“D345GHI”:
结果:
示例字符串“W123ABC”:
结果:
示例字符串“S678DEF”:
结果:
位置 7 之后的String列中的所有符号都是无关的。
我读过一篇非常相似的文章here。不同之处在于我不知道我要查找的确切文本(我不知道 String 列中的所有名称)。我所知道的是,对于要求和的 Number 值,字符串的前 7 个符号必须相同。
有人知道如何使用 r 来做到这一点吗?
这是一个
tidyverse
解决方案:
library(tidyverse)
df %>%
separate_rows(String, sep = "; ") %>%
group_by(File) %>%
count(String)
# A tibble: 4 × 3
# Groups: File [2]
File String n
<chr> <chr> <int>
1 F1 a 2
2 F1 b-1 2
3 F1 c 2
4 F2 x 1
玩具数据:
df <- data.frame(
String = c("a; b-1; c", "c", "b-1; a", "x"),
Number = c(5,7,9,11),
File = c("F1", "F1","F1","F2")
)