我有句子的矢量,说:
x = c("I like donut", "I like pizza", "I like donut and pizza")
我想算上两个单词的组合。理想输出是一个有3列(word1,word2和频率)的数据帧,可能是这样的:
I like 3
I donut 2
I pizza 2
like donut 2
like pizza 2
donut pizza 1
donut and 1
pizza and 1
在输出的第一个记录中,freq = 3
因为"I"
和"like"
一起出现3次:x[1]
,x[2]
和x[3]
。
任何建议都表示赞赏:)
答案 0 :(得分:6)
split
为单词,sort
正确识别对,获得所有对combn
,paste
对以获得以空格分隔的单词对,使用{{1获取频率,然后把它们放在一起。
以下是一个例子:
table
使用您的示例数据:
f <- function(x) {
pr <- unlist(
lapply(
strsplit(x, ' '),
function(i) combn(sort(i), 2, paste, collapse=' ')
)
)
tbl <- table(pr)
d <- do.call(rbind.data.frame, strsplit(names(tbl), ' '))
names(d) <- c('word1', 'word2')
d$Freq <- tbl
d
}