只是說我想在“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)
有誰知道為什么這對我不起作用?
謝謝!
uj5u.com熱心網友回復:
在這種情況下,它有助于回溯問題。
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"))))
uj5u.com熱心網友回復:
sapply 對每個元素的轉換 dat$word
library(stringr)
dat <- data.frame(id = 1:4, word = c(c("apple", "banana", "pear", "pineapple")))
dat$num_ap <- sapply(dat$word, function(x) sum(str_count(x, c("a", "p"))))
dat
#> id word num_ap
#> 1 1 apple 3
#> 2 2 banana 3
#> 3 3 pear 2
#> 4 4 pineapple 4
由reprex 包(v2.0.1)于 2021 年 10 月 14 日創建
uj5u.com熱心網友回復:
兩種解決方案(都沒有sum):
與rowwise():
library(dplyr)
library(stringr)
dat %>%
rowwise() %>%
mutate(num_ap = str_count(word, "a|p"))
id word num_ap
1 1 apple 3
2 2 banana 3
3 3 pear 2
4 4 pineapple 4
同lengths和str_extract_all:
library(dplyr)
library(stringr)
dat %>%
mutate(num_ap = lengths(str_extract_all(word, "a|p")))
id word num_ap
1 1 apple 3
2 2 banana 3
3 3 pear 2
4 4 pineapple 4
uj5u.com熱心網友回復:
使用 base R
dat$num_ap <- nchar(gsub("[^ap]", "", dat$word))
-輸出
> dat
id word num_ap
1 1 apple 3
2 2 banana 3
3 3 pear 2
4 4 pineapple 4
資料
dat <- structure(list(id = 1:4, word = c("apple", "banana", "pear",
"pineapple")), class = "data.frame", row.names = c(NA, -4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315274.html
