查找列中*值*之间的相关性

问题描述 投票:0回答:1

考虑一个数据集,其中每行都是一篮子 3 个水果。

library(data.table)
baskets <- data.table(fruit_1 = c('orange', 'apple', 'apple', 'pear')
                      ,fruit_2 = c('apple', 'pear', 'kiwi', 'kiwi')
                      ,fruit_3 = c('pear', 'kiwi', 'blueberry', 'blueberry'))

计算不同水果之间相关性的有效方法是什么?换句话说,不同的水果一起出现在同一个篮子/行中的频率是多少?我正在尝试获取每对 2 个水果的成对相关性(例如,“苹果和梨”、“苹果和猕猴桃”等)。

我现在能想到的最好的方法是为每个水果制作指示变量/二进制列,然后进行它们的相关性。有没有比这更好的方法,无论是计算方法还是其他方法?

编辑:我更新了这部分以显示一个看起来像我想要的结果的表格。它可能需要“同意/不同意分数”或其他东西而不是相关性,但你明白了。

baskets$apple = 0
baskets[fruit_1=='apple']$apple = 1
baskets[fruit_2=='apple']$apple = 1
baskets[fruit_3=='apple']$apple = 1

baskets$pear = 0
baskets[fruit_1=='pear']$pear = 1
baskets[fruit_2=='pear']$pear = 1
baskets[fruit_3=='pear']$pear = 1

baskets$kiwi = 0
baskets[fruit_1=='kiwi']$kiwi = 1
baskets[fruit_2=='kiwi']$kiwi = 1
baskets[fruit_3=='kiwi']$kiwi = 1

#looking for a table like this, but with every combination of fruit and imagining thousands of rows
desired_result = data.frame(fruit_1 = c('apple', 'pear', 'kiwi'),
                            fruit_2 = c('pear', 'kiwi', 'apple'),
                            similarity = c(cor(baskets$apple, baskets$pear),
                                           cor(baskets$pear, baskets$kiwi),
                                           cor(baskets$kiwi, baskets$apple)
                                           )
                            )


这感觉是一个不错的解决方案,但不是一个很好的解决方案。所以我想看看有什么更好的选择。 Data.table 是非常可取的,因为我在这方面做得更好,但我对任何事情都持开放态度。

r performance data.table apply coding-efficiency
1个回答
0
投票

您可以尝试使用

cor
以及
rowSums
+
as.data.frame.table
,例如,

d <- cor(sapply(
    unique(unlist(baskets)),
    \(x) +(rowSums(baskets == x) > 0)
))
d[upper.tri(d, TRUE)] <- NA
na.omit(as.data.frame.table(d,responseName = "similarity"))

你将获得

        Var1   Var2 similarity
2      apple orange  0.3333333
3       pear orange  0.3333333
4       kiwi orange -1.0000000
5  blueberry orange -0.5773503
8       pear  apple -0.3333333
9       kiwi  apple -0.3333333
10 blueberry  apple -0.5773503
14      kiwi   pear -0.3333333
15 blueberry   pear -0.5773503
20 blueberry   kiwi  0.5773503
© www.soinside.com 2019 - 2024. All rights reserved.