r - 计算数据框中变量中多个字母的出现次数?

只要说我想计算单词“apple”中“a”和“p”的数量,我可以这样做:

library(stringr)
sum(str_count("apple", c("b", "k")))

但是当我尝试应用这个逻辑来计算数据框中变量中多个不同单词的“a”和“p”的数量时,它不起作用,例如:

dat <- tibble(id = 1:4, word = c(c("apple", "banana", "pear", "pineapple")))
dat <- dat %>% mutate(num_ap = sum(str_count(word, c("a", "p"))))

这是行不通的。我的变量“num_ap”应该读作 c(3, 3, 2, 4) 但它读作 c(5, 5, 5, 5)

有谁知道为什么这对我不起作用?

谢谢!

最佳答案

在这种情况下,它有助于回溯问题。

str_count(dat$word, c("a", "p")) 本身将返回 [1] 1 0 1 3。每个数字代表字母“p”在数据框中每个单词中出现的次数。如果您使用 sum(str_count(dat$word, c("a", "p"))) 对该向量求和,您将得到 [1] 5 .由于您没有逐行进行,因此每行都将分配一个值 5,这与您的结果一致。

要解决此问题,请注意函数 rowwise()(dplyr 库的一部分)允许您单独处理每一行。因此,修改您的代码以合并 rowwise() 函数将解决您的问题:

dat <- dat %>% rowwise() %>% mutate(num_ap = sum(str_count(word, c("a", "p"))))

https://stackoverflow.com/questions/69571451/

相关文章:

flutter - 如何修复 vscode 上的 Flutter_localizations 错误?

c# - GraphQL : Not Getting EF Related objects afte

delphi - 如何在 Delphi 中以结果记录退出?

swift - 如何区分 Swift 中的泛型值是什么?

c++ - 将 std::string 转换为 std::string_view 的时间复杂度

haskell - 为什么我的 ByteString 在我的 x86_64 架构上是 BigEndi

haskell - 如何使组合数据构造函数成为类的实例?

r - 减去上面不是 NA 的数字

vue.js - Module parse failed : Unexpected token (3

amazon-web-services - 在哪里可以找到 AWS ARN 中服务和资源类型部分的可