首页 文章

计算序列之间的“子串”距离

提问于
浏览
1

我的数据集(第一行= Headers )如下:

ID;Activity 1;Activity 2; ... ;Activity 20;
Company_X;A1A3T1D1O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1O2R2
Company_Y;A1A3T1O1R1;A1A3T2O1R2;...;A1A3T11O1O3R5
Company Z;A1A3T1D8O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1R2

对于每个活动,每对(一个字母一个数字)代表序列的一部分 . A1 = actor1,A3 = actor3,O1 = object1 . 我尝试做的是计算公司活动之间的差异 . 例如,company_x的activity1应该具有 - 例如,2与company_y的activity1的差异,因为它们具有共同的A1A3T1O1R1但不具有D1和R8 .

TraMineR中的任何包都能做到吗?这意味着在每个事件中比较预定义数量的字符?

非常感谢您的帮助

1 回答

  • 0

    根据我的理解,每个字符串(活动)如 A1A3T6D2O1O2R2 应该被视为一对配对,你想比较这些序列 .

    TraMineR的 seqdef 函数可以以字符串形式读取序列 . 但是,当每个元素由多个单个字符定义时,您必须为其引入一个分隔符(例如,A1-A3-T6) . 然后,要将序列与公司名称配对,您可能还需要以表格形式组织数据,每个序列(活动)在一个单独的行中,类似于

    ID         Activity
    company_x  A1-A3-T6-D2-O1-O2-R2
    company_y  A1-A3-T1-O1-R1
    ...
    

    然后,您可以使用适用于不同长度序列的度量来计算相异度 . 例如,最佳匹配(OM)是在给定插入和替换成本的情况下将一个序列转换为另一个序列的最小成本 . 这应该给你你期望的 . 取决于替代成本,A1A3T6D2O1O2R2与A1A3T6D2O1R2之间的距离可能与A1A3T6D2O1O2R2与A3T4之间的距离不同

相关问题