【发布时间】:2017-10-03 02:05:26
【问题描述】:
我有一个产品数据框(苹果、梨、香蕉),在不同类别(食品和食品)的不同地点(城市)销售。
我想计算任何给定的一对产品在任何类别中一起出现的次数。
这是我正在尝试使用的示例数据集:
category <- c('food','food','food','food','food','food','edibles','edibles','edibles','edibles', 'edibles')
location <- c('houston, TX', 'houston, TX', 'las vegas, NV', 'las vegas, NV', 'philadelphia, PA', 'philadelphia, PA', 'austin, TX', 'austin, TX', 'charlotte, NC', 'charlotte, NC', 'charlotte, NC')
item <- c('apple', 'banana', 'apple', 'pear', 'apple', 'pear', 'pear', 'apple', 'apple', 'pear', 'banana')
food_data <- data.frame(cbind(category, location, item), stringsAsFactors = FALSE)
例如,“apple & banana”这对组合出现在“las vegas, NV”的“food”类别中,但也出现在“charlotte, NC”的“edibles”类别中。因此,“苹果和香蕉”对的计数为 2。
我想要的输出是这样的对数:
苹果和香蕉的(无序)计数
2
apple & pear
的(无序)计数4
有人知道如何实现这一点吗?对 R 来说相对较新,已经困惑了一段时间。
我正在尝试使用它来计算不同项目之间的亲和力。
关于输出的额外说明: 我的完整数据集包含数百个不同的项目。想要得到一个数据框,其中第一列是对,第二列是每对的计数。
【问题讨论】:
-
避免所有重塑这可以简化为
crossprod(table(food_data[-1]))。然后,如果需要,您可以使用diag将对角线设置为零