计算 keyword_search 创建的数据框中每页的关键字

Counting keywords per pages in dataframe created by keyword_search

library(pdfsearch)
Characters <- c("Ben", "John")
keyword_search('location of file', 
               keyword = Characters,
               path = TRUE)


     keyword page_num

1      Ben    1
2      Ben    1
3     John    1
4     John    2

我如何让 R 在每个 page_num 上计算我的所有关键字,创建一个数据框,如:

      name   page  count
1      Ben    1      2
2     John    1      1
3     John    2      1

我知道 nrow 函数,但有没有更快的方法?

nrow(dataframe[dataframe$keyword == "Ben" & dataframe$page_num == 1, ])

Base R 支持多种执行分组操作的方法(可能太多了,因为它使选择合适的方法变得更加困难):

my_data <- data.frame(name = c("Ben", "Ben", "John", "John"), page_num = c(1,1,1,2))

> test
  name page_num
1  Ben        1
2  Ben        1
3 John        1
4 John        2


# table()

> table(my_data)
      page_num
name   1 2
  Ben  2 0
  John 1 1

> as.data.frame(table(my_data))
  name page_num Freq
1  Ben        1    2
2 John        1    1
3  Ben        2    0
4 John        2    1

# xtabs

> xtabs(~ name + page_num, data = test)

      page_num
name   1 2
  Ben  2 0
  John 1 1

> as.data.frame(xtabs(~ name + page_num, data = my_data))
  name page_num Freq
1  Ben        1    2
2 John        1    1
3  Ben        2    0
4 John        2    1

用于执行分组操作的其他函数包括 by()tapply()ave() 等。

流行的 dplyr 包也有一个语法,用于对 data.frame 对象执行分组操作而不进行转换:

library(dplyr)

# `group_by()`, `mutate()`, `%>%`, and `n()` are exports from `dplyr`
my_data %>%
  group_by(name, page_number) %>%
  mutate(count = n())
  # n() is a dplyr operator that is mechanically identical to length()