열 내 사전 단어의 빈도를 계산하고 새로운 "dictfreq"열을 생성합니다.

Nov 24 2020

간단한 명령처럼 보이지만 R에서 이것을 생성하는 좋은 방법을 찾을 수없는 것 같습니다. 기본적으로, 다른 데이터 프레임의 열인 wordsgov 내에서 사전, dict에있는 각 단어의 빈도를 계산하고 싶습니다.

dict = "apple", "pineapple","pear"
df$wordsgov = "i hate apple", "i hate apple", "i love pear", "i don't like pear", "pear is okay", "i eat pineapple sometimes"

원하는 출력 : 새로운 빈도 순위, df $ wordsgov 내의 빈도에 따라 dict의 모든 단어를 표시합니다.

dict    freq_gov
"pear" : 3
"apple": 2
"pineapple: 1

나는 다음 코드를 시도했지만 df $ wordgov의 각 행에 dict 단어가 몇 번이나 나타나는지 확인했는데, 이는 내가 원하는 것이 아닙니다.

dictongov <- within(
  df,
  counts <- sapply(
    gregexpr(paste0(dict, collapse = "|"), wordsgov),
    function(x) sum(x > 0)
  )
)

대신 dict $ wordsgov에서 dict의 각 단어에 대한 빈도를 제공하도록 함수를 변경하는 방법을 알아낼 수없는 것 같습니다. 나는 str_detect를 시도했지만 작동하지 않습니다. 어떤 도움이라도 정말 감사하겠습니다 !!!

-편집 : 잘 작동하는 다음을 사용했습니다.

dictfreq <- df %>% mutate(dict = str_c(str_extract(wordsgov, str_c(dict, collapse = '|')), ':')) %>% 
                   count(dict, name = 'freq_gov') %>% arrange(desc(freq_gov))

그러나 빈도가 0 인 단어를 모두 제거했습니다. 빈도가 0 인 단어를 유지하는 방법이 있습니까? ".drop = FALSE"를 시도했지만이 코드 내에서 작동하지 않는 것 같습니다. 어떤 도움이라도 정말 감사하겠습니다. 감사!

답변

akrun Nov 24 2020 at 21:50

우리는 또한 이것을 할 수 있습니다 str_count

library(stringr)
library(purrr)
out <- map_int(str_c("\\b", v2, "\\b"), ~  sum(str_count(v1, .x)))
out
#[1] 2 1 3

rank(out)

데이터

v1 <- c("i hate apple", "i hate apple", "i love pear", "i don't like pear", 
       "pear is okay", "i eat pineapple sometimes")

v2 <- c("apple", "pineapple", "pear")