计算 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()
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()