我问了一个不太清楚的问题.所以我试着以一种可以理解的方式解释它.这是我的数据
我的数据看起来像这样
看起来像这样
# 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)
它与我提出的任何问题都不相似; 所以,如果仍然不清楚,请评论,我试着解释一下
我将通过两个步骤来解决这个问题:
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结构是要走的路.