R 如何删除重复行并仅为具有分数的基因列表保留最高值
我有一个由20k行组成的三列表。第1列:基因ID列表(可以有重复的ID) 第二列:常量字符串R 如何删除重复行并仅为具有分数的基因列表保留最高值,r,bash,awk,R,Bash,Awk,我有一个由20k行组成的三列表。第1列:基因ID列表(可以有重复的ID) 第二列:常量字符串 第三列:一个值 我想要的是给我的列表排序,只留下唯一的基因ID。对于重复的基因ID,我只想留下得分最高的 这里有一个例子,提前谢谢 TMCS09g1008699 ensembl 6.4 TMCS09g1008671 ensembl 6.4 TMCS09g1008672 ensembl 6.5 TMCS09g1008673 ensembl 6 TMCS09g1008674 ensembl 5.4
第三列:一个值
我想要的是给我的列表排序,只留下唯一的基因ID。对于重复的基因ID,我只想留下得分最高的 这里有一个例子,提前谢谢
TMCS09g1008699 ensembl 6.4
TMCS09g1008671 ensembl 6.4
TMCS09g1008672 ensembl 6.5
TMCS09g1008673 ensembl 6
TMCS09g1008674 ensembl 5.4
TMCS09g1008675 ensembl 5.4
TMCS09g1008676 ensembl 4.9
TMCS09g1008677 ensembl 4.6
TMCS09g1008677 ensembl 4.4
TMCS09g1008679 ensembl 4.3
TMCS09g1008680 ensembl 3.9
TMCS09g1008681 ensembl 3.8
TMCS09g1008682 ensembl 3.6
TMCS09g1008683 ensembl 3.5
TMCS09g1008684 ensembl 3.5
TMCS09g1008685 ensembl 3.4
TMCS09g1008686 ensembl 3.4
TMCS09g1008687 ensembl 3.4
TMCS09g1008688 ensembl 3
TMCS09g1008689 ensembl 2.6
TMCS09g1008690 ensembl 2
TMCS09g1008699 ensembl 5.9
请您试试下面的
awk
,如果这对您有帮助,请告诉我
awk '{b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;a[$1]=a[$1]>$NF?a[$1]:$NF;} END{for(i in a){print b[i]}}' Input_file
现在也添加了一个非线性的解决方案
awk '
{
b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;
a[$1]=a[$1]>$NF?a[$1]:$NF}
END{
for(i in a){
print b[i]}
}
' Input_file
请您试试下面的
awk
,如果这对您有帮助,请告诉我
awk '{b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;a[$1]=a[$1]>$NF?a[$1]:$NF;} END{for(i in a){print b[i]}}' Input_file
现在也添加了一个非线性的解决方案
awk '
{
b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;
a[$1]=a[$1]>$NF?a[$1]:$NF}
END{
for(i in a){
print b[i]}
}
' Input_file
您可以使用awk来实现此目的:
- 在数组中存储每个基因ID的最高分数
- 扫描输入
- 如果分数高于之前看到的分数,则替换它
- 最后,打印数组的内容
awk '{ m[$1] = m[$1] > $3 ? m[$1] : $3; } END { for (i in m) print i, "ensembl", m[i] }' file
如果您想查看按基因ID排序的输出,则只需将上述awk管道传输到
排序,您可以使用awk进行此操作:
- 在数组中存储每个基因ID的最高分数
- 扫描输入
- 如果分数高于之前看到的分数,则替换它
- 最后,打印数组的内容
有一种方法可以做到这一点:
awk '{ m[$1] = m[$1] > $3 ? m[$1] : $3; } END { for (i in m) print i, "ensembl", m[i] }' file
如果您想查看按基因ID排序的输出,那么只需将上述awk传输到sort
即可使用sort
:
sort -k3rn file | sort -u -k1,1
第一种排序是按第三列(k3
)数字(n
)按降序(r
)对文件进行排序,第二种排序是根据第一列对输出进行唯一化。您可以使用排序
:
sort -k3rn file | sort -u -k1,1
第一种排序按第三列(k3
)数字(n
)降序(r
)对文件进行排序,第二种排序根据第一列对输出进行唯一化。请将该示例输入的所需输出添加到问题中。如果您在r
中使用tidyverse
,您可以这样做:df%%>%groupby(gene)%%>%top(1,value)
请将您所需的样本输入输出添加到您的问题中。如果您正在使用r
中的tidyverse
,您可以这样做:df%%groupby(gene)%%>%top(1,value)