R 计算子集成员共现和组字母长度

R 计算子集成员共现和组字母长度,r,traminer,R,Traminer,在R中是否有一种方法可以计算序列中状态共现的模式,即在元素顺序不一定重要的组上工作?其目的是找出在更长的分组中出现较大分组的情况有多普遍 例如,输入数据集可能是这样的(“真实”数据序列最多10列宽,1000行深) 结果可能会显示 abcd, abcd* 作为一个集合或类,其计数表示出现的次数,例如,.*表示子集或“其他成员”类别,并基于length()进行评分 结果还将表明 abcde 作为一个不同的、稍微罕见的集合或类,分数越高,反映的length()越长 最后 abc* 会有较高的

在R中是否有一种方法可以计算序列中状态共现的模式,即在元素顺序不一定重要的组上工作?其目的是找出在更长的分组中出现较大分组的情况有多普遍

例如,输入数据集可能是这样的(“真实”数据序列最多10列宽,1000行深)

结果可能会显示

abcd, abcd*  
作为一个集合或类,其计数表示出现的次数,例如,.*表示子集或“其他成员”类别,并基于
length()
进行评分

结果还将表明

abcde
作为一个不同的、稍微罕见的集合或类,分数越高,反映的
length()
越长

最后

abc*
会有较高的计数分数,但较低的
length()


像Traminer这样在无序(无序?)群体中工作的东西会很好。我注意到可能存在计算负载的问题,但是如果我需要剪掉牙齿来编写程序,我会考虑这一点(即某种琐碎的阈值)。

< P>这是一个函数,它按字母顺序排序每个序列中的元素,然后提取排序序列的连续不同的状态。
dssort <- function(seqdata){
  ssort <- t(apply(seqdata, MARGIN=1, sort))
  ssort.seq <- seqdef(ssort, states=alphabet(seqdata), labels=stlab(seqdata))
  sdss  <- seqdef(seqdss(ssort.seq), missing="%")
  sdss
} 
因此,您知道94个序列包含元素
FE
EM
,只有这两个,84个具有
EM
TR
,没有其他状态,57个具有
EM
JL
TR

您还可以使用
seqfplot(set)
绘制频繁集

不确定这是否是你正在寻找的,但希望它能帮助你

====

以下是如何摆脱无用的“/1”


我要补充的是,全球字母表大约有20个字符或因子,并且可能有重复的一行。非常感谢。该函数工作正常,但如果我更改了行的ssort,我应该发布完整的解决方案,还是您想修改您的解决方案?我觉得你(更)有资格澄清问题,但我不介意试一试……@BigOldDave我修复了代码中的错误,并提出了一种摆脱无用“\1”的方法。太好了!我还包括
行名(t)
dssort <- function(seqdata){
  ssort <- t(apply(seqdata, MARGIN=1, sort))
  ssort.seq <- seqdef(ssort, states=alphabet(seqdata), labels=stlab(seqdata))
  sdss  <- seqdef(seqdss(ssort.seq), missing="%")
  sdss
} 
library(TraMineR)
data(mvad)
shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
mvad.seq <- seqdef(mvad[,17:86], states=shortlab)

set <- dssort(mvad.seq)

seqtab(set, tlim=1:3)
               Freq Percent
EM/1-FE/1        94      13
EM/1-TR/1        84      12
EM/1-JL/1-TR/1   57       8
tf <- seqtab(set, tlim=1:3, format="STS")
t <- attr(tf,"freq")
rownames(t) <- gsub("-\\*","",rownames(t))
t
            Freq   Percent
EM-FE         94 13.202247
EM-TR         84 11.797753
EM-JL-TR      57  8.005618