R - Подсчет общего числа появлений слова из списка, который появляется во фрейме данных и группируется - PullRequest
1 голос
/ 06 февраля 2020

У меня есть такой фрейм данных:

ID   Word
1    Tree
1    House
1    Tree
2    Snail
2    Tree
3    Car

И у меня есть список ключевых слов, которые я хочу проверить:

(House, Tree, Bird)

Я хочу знать, сколько раз для каждый идентификатор, любое слово в моем списке ключевых слов появляется.

Т.е. слово Дом, Дерево или Птица встречается 3 раза в идентификаторе (1), а Дом, Дерево или Птица появляется только один раз в идентификаторе (2), и нет никаких вхождений в ID (3)

ID   Count
1     3
2     1
3     0

Я не уверен, как справиться с этим. Я знаю, как посчитать, сколько раз слово встречается в каждом идентификаторе, но не знаю, сколько раз встречаются слова из другого списка.

Спасибо за любые предложения / указания и т. Д. c.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Мы можем создать логический индекс и получить sum, сгруппированный по 'ID'. Не уверен, является ли 'v1' vector или list (если это list, то unlist(v1) и использовать его с тем же кодом)

library(dplyr)
df1 %>% 
   group_by(ID) %>% 
   summarise(Count = sum(Word %in% v1))
# A tibble: 3 x 2
#     ID Count
#  <int> <int>
#1     1     3
#2     2     1
#3     3     0

или filter а затем выполните count

df1 %>% 
   filter(Word %in% v1) %>%
   count(ID, .drop = FALSE)

данные

v1 <- c("House", "Tree", "Bird")
df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L), Word = c("Tree", 
"House", "Tree", "Snail", "Tree", "Car")), class = "data.frame", 
row.names = c(NA, 
-6L))
1 голос
/ 06 февраля 2020

В базе R мы можем использовать table для подсчета числа Word, в котором vec для каждого ID.

table(df$ID, df$Word %in% vec)

#    FALSE TRUE
#  1     0    3
#  2     1    1
#  3     1    0

Здесь имена строк (1, 2, 3) - это идентификаторы. FALSE - это число Word, которых нет в vec для каждого ID, тогда как TRUE является числом Word, которое присутствует для каждого ID.

Чтобы получить точный ожидаемый результат, мы можем преобразовать таблицу в фрейм данных и взять в качестве количества только столбец TRUE.

data <- as.data.frame.matrix(table(df$ID, df$Word %in% vec))
data.frame(ID = rownames(data), count = data$`TRUE`)

#  ID count
#1  1     3
#2  2     1
#3  3     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...