Поиск нескольких значений в столбце в R - PullRequest
0 голосов
/ 20 января 2019

У меня есть фрейм данных с двумя столбцами:

df = data.frame(animals = c("cat; dog; bird", "dog; bird", "bird"), sentences = c("the cat is brown; the dog is barking; the bird is green and blue","the dog is black; the bird is yellow and blue", "the bird is blue"), stringsAsFactors = F)

Мне понадобится сумма вхождений всех "животных" в каждой строке во всем столбце "предложений".

Например: «животные», первая строка c («кошка; собака; птица») = sum_occurferences_sentences_column (кошка = 1) + (собака = 2) + (птица = 3) = 6.

Результатом будет третий столбец, подобный этому:

df <- cbind( sum_accurrences_sentences_column = c("6", "5", "3"), df)

Я пробовал следующие коды, но они не работают.

df[str_split(df$animals, ";") %in% df$sentences, ]

str_count(df$sentences, str_split(df$animals, ";"))

Любая помощь будет оценена :)

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Вот базовое R решение:

Сначала удалите все ; с помощью gsub, затем разбейте столбец предложений и unlist на вектор:

split_sentence_column = unlist(strsplit(gsub(';','',df$sentences),' '))

Затем настройте цикл for и для каждой строки получите вектор животных, проверьте, какие из животных столбца предложения находятся в списке животных, с помощью %in%, а затем сложите все случаи TRUE. Затем мы можем напрямую присвоить это новому столбцу df:

for(i in 1:nrow(df)){
  animals = unlist(strsplit(df$animals[i], '; '))
  df$sum_occurrences_sentences_column[i] = sum(split_sentence_column %in% animals)
}

> df
         animals                                                        sentences sum_occurrences_sentences_column
1 cat; dog; bird the cat is brown; the dog is barking; the bird is green and blue                                6
2      dog; bird                    the dog is black; the bird is yellow and blue                                5
3           bird                                                 the bird is blue                                3

0 голосов
/ 20 января 2019

A map() способ манипулирования каждым кусочком животного в первом столбце.

library(tidyverse)
string <- unlist(str_split(df$sentences, ";"))

df %>% rowwise %>%
  mutate(SUM = str_split(animals, "; ", simplify = T) %>%
    map( ~ str_count(string, .)) %>%
    unlist %>% sum)

#   animals        sentences                                           SUM
#   <chr>          <chr>                                               <int>
# 1 cat; dog; bird the cat is brown; the dog is barking; the bird...   6
# 2 dog; bird      the dog is black; the bird is yellow and blue       5
# 3 bird           the bird is blue                                    3
...