首页 > 解决方案 > 识别、分组数据框 (R) 中的唯一条目

问题描述

我有一个包含两列的数据框。一个是 ID 列(字符串),第二个由数百个字符长的字符串(DNA 序列)组成。我想识别独特的 DNA 序列并将独特的组组合在一起。

使用:

data$duplicates<-duplicated(data$seq, fromLast = TRUE)

我已成功确定特定行是否重复。这还不够——我想知道我是否有 2、3 等重复项,以及它们对应的 ID(重要的是,ID 始终与其对应的序列保持一致)。

也许是这样的:

for 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")

标签: rdataframeduplicates

解决方案


我希望输出是一个新列(例如:df$grouping),其中为每个唯一组赋予一个数值,所以在这种情况下:

由于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,例如

table(df$seq)
#  AAGTCA AGCCTCA   AGTCA AGTCAGG 
#       1       1       2       1 

table(df$grouping)
# 1 2 3 4 
# 1 1 2 1 

sort(table(df$seq), decreasing = T)
#   AGTCA  AAGTCA AGCCTCA AGTCAGG 
#       2       1       1       1 

推荐阅读