如何上下移动字符串并从中删除类似的字符串?

nik*_*nik 2 r

我问了一个不太清楚的问题.所以我试着以一种可以理解的方式解释它.这是我的数据

我的数据看起来像这样

看起来像这样

#             V1      V2               V3
#1                 Q9UNZ5             Q9Y2W1
#2 Q9ULV4;Q6QEF8                     
#3                                    Q9UNZ5
#4                  Q9H6F5              
#5                  Q9H2K0     Q9ULV4;Q6QEF8
#6                  Q9GZZ1            Q9UKD2
#7        Q9H6F5    Q9GZZ1            Q9GZZ1
#8        Q9GZZ1                      Q9NYF8
#9        Q9BWS9                     
Run Code Online (Sandbox Code Playgroud)

我想删除所有这些中的重复字符串,例如,V1我们第一次拥有所有字符串,所以我们不删除任何东西只是安排他们有

Q9ULV4
Q6QEF8
Q9H6F5
Q9GZZ1 
Q9BWS9
Run Code Online (Sandbox Code Playgroud)

然后我们用第一列检查第二列字符串,然后删除那些重复的列并再次排列它们.对于第三列,我们检查第一列和第二列的字符串,如果相似,则我们删除然后排列它们.所以输出应该如下所示.

Q9ULV4  Q9UNZ5  Q9Y2W1
Q6QEF8  Q9H2K0  Q9UKD2
Q9H6F5          Q9NYF8
Q9GZZ1          
Q9BWS9          
Run Code Online (Sandbox Code Playgroud)

它与我提出的任何问题都不相似; 所以,如果仍然不清楚,请评论,我试着解释一下

tal*_*lat 5

我将通过两个步骤来解决这个问题:

1)每列获取唯一元素并转换为列表:

l <- lapply(df, function(x) unique(unlist(strsplit(as.character(x), ";"))))
Run Code Online (Sandbox Code Playgroud)

2)删除任何先前列中出现的重复项

for(i in seq_along(l)) {
  l[[i]] <- setdiff(l[[i]], unlist(l[seq_len(i-1L)]))
}
Run Code Online (Sandbox Code Playgroud)

我使用a list而不是a data.frame的原因是因为data.frames要求所有列具有相同的行数,这不是这里的情况(除非用NA或空字符串填充它们).在这种情况下,list结构是要走的路.