如何对 r 中包含特定(未知)文本的行求和?

问题描述 投票:0回答:1

我有一张看起来像这样的桌子:

字符串 数量 文件
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”:

  • 存在于第 5 行和第 6 行
  • F1 中的值为 4,F1 中的值为 7

结果:

  • F1 值的总和 = 11

示例字符串“W123ABC”:

  • 存在于第1,2和3行
  • F1 中的值为 9,F1 中的值为 4,F2 中的值为 11

结果:

  • F1 值的总和 = 13
  • F2 值的总和 = 11

示例字符串“S678DEF”:

  • 存在于第4,7和8行
  • F3 中的值为 3,F3 中的值为 12,F2 中的值为 1

结果:

  • F2 值的总和 = 1
  • F3 值的总和 = 15

位置 7 之后的String列中的所有符号都是无关的。

我读过一篇非常相似的文章here。不同之处在于我不知道我要查找的确切文本(我不知道 String 列中的所有名称)。我所知道的是,对于要求和的 Number 值,字符串的前 7 个符号必须相同。

有人知道如何使用 r 来做到这一点吗?

r sum aggregate
1个回答
0
投票

这是一个

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")
)
© www.soinside.com 2019 - 2024. All rights reserved.