美文网首页
按行名进行表格筛选:awk&python&R

按行名进行表格筛选:awk&python&R

作者: 溪溪溪溪溪川 | 来源:发表于2019-03-14 09:22 被阅读0次

    引入

    Excel确实很强大。
    用Excel查找一行很容易,同样的事情1000次就很复杂。
    批量查询的需求应运而生~
    实验狗确实需要各种帮助,不然就傻傻复制啦~

    1.awk读取多个文件

    awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{}' file1 file2
    

    1)awk初步提取位置和其他信息(可适当添加)

    pengzw@super-server:~/reference/At$ awk -F "[= \t]" '$3 == "gene" {print$11"\t"$4"\t"$5}' Athaliana_167_TAIR10.gene.gff3|head -n 5
    AT1G01010   3631    5899
    AT1G01020   5928    8737
    AT1G01030   11649   13714
    AT1G01040   23146   31227
    AT1G01050   31170   33153
    

    2)awk对两个文件处理:按照名字筛选

    awk 'NR==FNR{a[\$1]}NR!=FNR{if (\$1 in a) print $0}' id id.all > out 
    

    命令解释:NR==FNR和ARGIND==1和FILENAME=ARGV[1]表示第一个文件,NR!=FNR和NR>FNR以及ARGIND==1和FILENAME=ARGV[2]都表示第二个文件,a[$1]=1: 索引操作,类似于python中的字典。

    将结果输出到out中,第一个NR==FNR读取ID,第二个,如果第二个文件的第一行在第一个文件中,就输出第二文件

    pengzw@super-server:~/reference/phytozome/at$ cat id
    AT1G01010
    AT1G01020
    pengzw@super-server:~/reference/phytozome/at$ cat id.all
    AT1G01010   3631    5899
    AT1G01020   5928    8737
    AT1G01030   11649   13714
    AT1G01040   23146   31227
    AT1G01050   31170   33153
    pengzw@super-server:~/reference/phytozome/at$ awk 'NR==FNR{a[$1]}NR!=FNR{if ($1 in a) print $0}' id id.all > out 
    pengzw@super-server:~/reference/phytozome/at$ cat out
    AT1G01010   3631    5899
    AT1G01020   5928    8737
    

    2.利用python中的panda筛选

    import pandas as pd 
    df1 = pd.read_csv('D:/TPM.csv', encoding='gbk') #加encoding=‘gbk’是因为文件中存在中文,不加可能出现乱码
    df2 = pd.read_csv('D:/ID.csv', encoding='gbk')
    index = df1[u'Gene_ID'].isin(df2['gene']) #用2中的行名去筛选1中共有行名的行
    outfile = df1[index]
    outfile.to_csv('D:/result.csv', index=False, encoding='gbk') 
    

    注意:
    不会用python,可以直接在windows装一个Anaconda,利用win+R—jupyter notebook—New—python3—复制代码即可。

    3.利用R中merge函数筛选

    ID=read.csv('geneID.csv')  #f含有geneID列
    All_TPM<-read.csv('All_TPM.csv') #含有geneID列,同上
    TPM<-merge(All_TPM,ID,by='geneID') #按照列名进行筛选,保证ID和All_TPM列名相同
    head(TPM)
    write.csv(TPM,"TPM.csv")
    

    3.参考文章

    https://blog.csdn.net/destiny_python/article/details/78663460

    相关文章

      网友评论

          本文标题:按行名进行表格筛选:awk&python&R

          本文链接:https://www.haomeiwen.com/subject/kapfmqtx.html