Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何删除重复行并仅为具有分数的基因列表保留最高值_R_Bash_Awk - Fatal编程技术网

R 如何删除重复行并仅为具有分数的基因列表保留最高值

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

我有一个由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
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)