我有一个包含两列的数据框。一个是ID列(字符串),第二个是由几百个字符长的字符串(DNA序列)组成。我想识别独特的DNA序列,并将独特的组组合在一起。
使用:
data$duplicates<-duplicated(data$seq, fromLast = TRUE)
我已成功确定特定行是否重复。这还不够-我想知道我是否有2个,3个等重复项,以及它们对应于哪个ID(重要的是,ID始终保持其对应的顺序)。
也许像这样:
对于data $ duplicates = TRUE ...“在data $ grouping中添加数字 对应于重复项。”
我不知道如何编写最后一部分的代码。 感谢您的帮助。
编辑:例如:
df <- data.frame(ID = c("seq1","seq2","seq3","seq4","seq5"),seq= c("AAGTCA",AGTCA","AGCCTCA","AGTCA","AGTCAGG"))
我希望输出是一个新列(例如df $ grouping),其中为每个唯一组赋予一个数值,所以在这种情况下:
("1","2","3","2","4")
答案 0 :(得分:1)
我希望输出是一个新列(例如df $ grouping),其中为每个唯一组赋予一个数值,所以在这种情况下:
由于Limited
已经成为一个因素,因此我们只能使用级别编号。当一个因子被强制为整数时给出。
df$seq
如果在您的真实数据中,df$grouping = as.integer(df$seq)
df
# ID seq grouping
# 1 seq1 AAGTCA 1
# 2 seq2 AGTCA 3
# 3 seq3 AGCCTCA 2
# 4 seq4 AGTCA 3
# 5 seq5 AGTCAGG 4
列不属于seq
类,您仍然可以使用factor
。默认情况下,组的顺序为字母顺序-您可以通过按需要的顺序为df$grouping = as.integer(factor(df$seq))
赋予levels
参数来修改此顺序。例如,factor
会将级别(以及分组整数)按照它们首次出现的顺序排列。
如果要查看每个组中的行数,请使用df$grouping = as.integer(factor(df$seq, levels = unique(df$seq)))
,例如
table