在R中找到带有重复项的模式

时间:2014-10-11 22:33:01

标签: r duplicates pattern-recognition

在R中,我有一个包含数据的列表列表,例如

1 "a" "b" "c"
2 "a" "a" "b" "d"
3 "a" "a"

我需要识别列表中常见的模式。例如,这里,“a”“a”和“a”“b”是常见的。我尝试使用eclat(),但这不允许每个列表中重复的值。然后我尝试删除重复的值,但后来我丢失了信息(比如“a”“a”是一种常见的模式)。

我也尝试重命名重复的事件,但是“a”“b”和“a”“a”“b”不会返回“a”“b”作为模式,因为第二个列表将被重命名像“a”“a2”“b”。

有没有更好的方法呢?

更新

每个列表中的字符串可以是单个字符或一串字符。例如

1 "a+12" "bfd" "c"
2 "a+12" "a+12" "bfd" "d"
3 "a+12" "a+12" "a"

此处,“a + 12”“bfd”和“a + 12”“a + 12应该被识别为模式

1 个答案:

答案 0 :(得分:0)

至少对于样本数据,以下内容看起来很有帮助:

#data in a 'list'
myls = list(x1 = c("a+12", "bfd", "c"), 
            x2 = c("a+12", "a+12", "bfd", "d"),
            x3 = c("a+12", "a+12", "a"))

pats = table(unlist(lapply(myls, 
           function(x) combn(seq_along(x), 2, 
                             function(i) paste(x[i[1]:i[2]], collapse = ";")))))
strsplit(names(pats[pats == max(pats)]), ";")
#[[1]]
#[1] "a+12" "a+12"
#
#[[2]]
#[1] "a+12" "bfd"