只要说我想计算单词“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/