r - 识别、分组数据框 (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")
解决方案
我希望输出是一个新列(例如: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
推荐阅读
- vue.js - 如果在 Vue.js 中禁用输入,则更改背景颜色
- php - 从具有第二个数组的位置和长度的数组中获取数组
- c - C 编程/Linux - 读取和写入文件时输出不正确?
- python - python中钻石继承中的super()奇怪行为
- r - 当我重建自定义 R 包时,未安装依赖项下列出的包
- r - 如何将字符向量列表转换为单个向量?
- javascript - HTTP POST 到 Web API 后的 Angular 2+ 确认页面
- node.js - 如何使用 git 部署到测试服务器?
- javascript - 基于传入键的json对象更改值函数
- c# - 在 C# 中按 DateTime 值合并对象