我有以下数据集:
name date cat1 cat2 cat3 cat4 cat5
joe 15/09/2013 A D C D NA
joe 14/09/2013 D A C NA NA
joe 13/09/2013 A C NA NA NA
jack 15/09/2013 G I K D O
jack 14/09/2013 H G O M K
对于每个人,我想计算他们每个类别相互比较的相似程度的百分比。例如
name percentage
joe 88.9%
jack 60%
请注意,NA 被忽略,并且类别出现的次数无关紧要。
引导您了解我的逻辑(这可能是错误的,或者可能有更好的方法来做到这一点,如果有,请说):让我们以乔为例,
- 第 1 行(2013 年 9 月 15 日)与第 2 行(2013 年 9 月 14 日)匹配 100%
- 第 1 行(2013 年 9 月 15 日)与第 3 行(2013 年 9 月 13 日)匹配 66%
- 第 2 行(2013 年 9 月 14 日)与第 3 行(2013 年 9 月 13 日)匹配 66%
- 第 2 行(2013 年 9 月 14 日)与第 1 行(2013 年 9 月 15 日)相比匹配 100%
- 第 3 行(2013 年 9 月 13 日)与第 1 行(2013 年 9 月 15 日)相比匹配 100%
- 第 3 行(2013 年 9 月 13 日)与第 2 行(2013 年 9 月 14 日)相比匹配 100%
所以平均分是88.9%
对于杰克,只有类别“G”、“K”、“O”出现在两行中,因此平均得分为 60%
我研究了 R 中的 ddply 函数,但我不确定是否可以使用它来创建上面的数据框(名称、百分比)。我认为我应该避免的其他选择,因为我确信在 R 中必须有一种更有效的方法来做到这一点,是创建一个带有嵌套 for 循环的 R 脚本..eek!
而我的最后一个选择,这可能是最好的方法(因为这个数据框会很大)是使用 Python,因此如果有人知道如何做到这一点是 Python(猜想我们将使用 Pandas)我会很感激一些帮助。
所以说清楚,两个问题:
如果可以使用 ddply 有人可以告诉我如何,否则有人对我如何在 r 中解决这个问题有任何其他想法吗?
使用上面的小数据框,有人可以提供一个他们如何在 Python 中解决这个问题的例子吗?