在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应该被识别为模式
答案 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"