r - 在一个字符串向量中搜索一个字符串的所有实例在另一个字符串向量中
问题描述
我在一个带有数字列和相关感知的小标题中有一些数据。我还有一个大约 450 个较短字符串的向量,我想检查每个感觉。最终我想知道与每个〜450个字符串相关联的数字条目的总和值(在根据命中数按比例分配每个句子之后 - 例如,如果其中一个句子与数值3相关联并且从 450 个字符串中有两个命中我想在他们的每个计数中添加 1.5,参见示例 1 和 2,它们都出现在第一个“句子”字符串中)
下面的示例得到了我想要的 4 个示例字符串的“final_result”,但对于 ~450 个字符串不实用。(我并不特别热衷于构建一个包含 2 + ~450 列的大表来执行此操作,所以如果这可以通过搜索匹配的单个列表返回或任何其他方式来完成,那很好。)
有人可以提出一种更具可扩展性和更合适的方法来获得相同的基本输出吗?
非常感谢。
##Tibble with some strings and associated numbers
pacman::p_load(stringi, tidyverse)
set.seed(1)
entries <- tibble("numbers" = rnorm(100),
"strings" = stri_rand_strings(100, 15, "[A-Za-z]"))
#Strings known to show up for example
strings_to_find <- c("NJad", "GNl", "Qaw", "bQ")
#Answers in the form of a table
answers_as_table <- entries %>%
mutate(String1 = str_detect(entries$strings, pattern = strings_to_find[[1]]),
String2 = str_detect(entries$strings, pattern = strings_to_find[[2]]),
String3 = str_detect(entries$strings, pattern = strings_to_find[[3]]),
String4 = str_detect(entries$strings, pattern = strings_to_find[[4]]))
#Find the number of strings in each entry
answers_as_table$CountofHits <- rowSums(answers_as_table[,3:6])
#prorate accordingly
answers_as_table$proration <- answers_as_table$numbers / answers_as_table$CountofHits
#Find the sum of the prorated amount
SumString1 <- sum(answers_as_table[answers_as_table$String1,8])
SumString2 <- sum(answers_as_table[answers_as_table$String2,8])
SumString3 <- sum(answers_as_table[answers_as_table$String3,8])
SumString4 <- sum(answers_as_table[answers_as_table$String4,8])
(final_product <- tibble("strings_to_find" = strings_to_find,
"Sums" = c(SumString1, SumString2, SumString3, SumString4)))```
解决方案
用于咯咯笑的基本 R 尝试:
g <- stack(sapply(strings_to_find, grep, x=entries$strings, simplify=FALSE))
g$numbers <- entries$numbers[g$values]
g$prorata <- ave(g$numbers, g$values, FUN=function(x) x/length(x))
out <- aggregate(prorata ~ ind, data=g, sum)
out
# ind prorata
#1 NJad -0.3132269
#2 GNl -0.3132269
#3 Qaw 0.1836433
#4 bQ 0.3575099
比较好:
out == final_product
# ind prorata
#[1,] TRUE TRUE
#[2,] TRUE TRUE
#[3,] TRUE TRUE
#[4,] TRUE TRUE
推荐阅读
- shell - 如何在詹金斯工作区中移动文件?
- excel - PowerPivot how to remove column filter through VBA code
- java - 如何使用 JNA 指针在内存中写入数据?
- regex - 正则表达式中的转义逗号 - Notepad++
- ansible - 如何避免用ansible进行变量替换
- c# - 用于格式错误的 JSON 的自定义 JSON 反序列化器
- angularjs - 如何从下拉数组中的元素数组中选择一个值
- python - 不规则广播视图 numpy
- angular - 共享模块中的角度导入/导出模块或多个模块中的导入
- sql - 无法使用 UTF-16 导出 xml - BCP SQL