小编Ape*_*pex的帖子

如果行满足一定范围,如何打印行

我有两个大文件,如下所示:

f1:

chr1,3073253,3074322,gene_id,"ENSMUSG00000102693.1",gene_type,"TEC"
chr1,3074253,3075322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3077253,3078322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3102916,3103025,gene_id,"ENSMUSG00000064842.1",gene_type,"snRNA"
chr1,3105016,3106025,gene_id,"ENSMUSG00000064842.1",transcript_id,"ENSMUST00000082908.1"
Run Code Online (Sandbox Code Playgroud)

f2:

chr,name,start,end
chr1,linc1320,3073300,3074300
chr3,linc2245,3077270,3078250
chr1,linc8956,4410501,4406025
Run Code Online (Sandbox Code Playgroud)

我想要做的是在文件 1 的单独列中打印文件 2 的行,如果file2的范围startend列在 file1 的范围内(第 2 列和第 3 列)并且chr相同。因此,基于我提供的虚拟示例文件 - 所需的输出应该是(只有范围linc1320在 file1 的第一行):

chr1,3073253,3074322,gene_id,"ENSMUSG00000102693.1",gene_type,"TEC",linc1320,3073300,3074300
chr1,3074253,3075322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3077253,3078322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3102916,3103025,gene_id,"ENSMUSG00000064842.1",gene_type,"snRNA"
chr1,3105016,3106025,gene_id,"ENSMUSG00000064842.1",transcript_id,"ENSMUST00000082908.1"
Run Code Online (Sandbox Code Playgroud)

我不是专业的编码员,但我一直在使用此代码根据 file2 手动更改范围:

awk -F ',' '$2<=3073300,$3>=3074300, {print $1,$2,$3,$4,$5,$6,$7}' f1.csv
Run Code Online (Sandbox Code Playgroud)

我没有使用特定的编程语言有特别的爱好-无论是Pythonawk将是非常有益的。感谢您提供任何帮助。

python awk pandas

7
推荐指数
1
解决办法
316
查看次数

按列分组并使用 bash 创建新的数据框

我有一个如下所示的数据框:

chr1,A,1,3,y,-
chr1,A,2,30,y,-
chr1,A,12,40,y,-
chr2,B,0,3,y,-
chr2,B,1,30,y,-
chr3,C,1,3,y,-
Run Code Online (Sandbox Code Playgroud)

我想按第二列进行分组,然后使用 bash 获取第三列的最小值和第四列的最大值。所以期望的输出应该是:

chr1,A,1,40,y,-
chr2,B,0,30,y,-
chr3,C,1,3,y,-
Run Code Online (Sandbox Code Playgroud)

我设法构建了一个粗略的代码来执行此操作,但它并没有完全给出最终输出。

这是代码:

awk 'BEGIN{FS=OFS=","} {if (!( $2 in min )) { min[$2] = $3; max[$2] = $4; row[$2] = $0 } else { if ($3 < min[$2]) min[$2] = $3; if ($4 > max[$2]) max[$2] = $4; row[$2] = $0 } } END { for (key in row) print row[key] }'
Run Code Online (Sandbox Code Playgroud)

我用这段代码得到的最终输出是:

chr1,A,2,30,y,-
chr2,B,1,30,y,-
chr3,C,1,3,y,-
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到我想要的输出?有没有更简单的代码可以在 bash 中执行此操作?谢谢。

bash awk dataframe

3
推荐指数
1
解决办法
95
查看次数

基于数据框和向量之间的部分匹配来过滤行

我有一个数据框,想要根据第一列中的名称与向量中的名称的部分匹配来过滤它。

nam <- c('mmu_mir-1-3p','mmu_mir-1-5p','mmu-mir-3-5p','mir-4','mmu-mir-6-3p') #factor
aa <- c('12854','36','5489','54485','2563') #numeric
df <- data.frame(nam,aa)

vector <- c('mir-1','mir-3','mir-6')
Run Code Online (Sandbox Code Playgroud)

我需要在新数据框中包含行,其中的名称df$nam与 中的名称部分匹配vector。所以new_df应该看起来像这样。

new_nam <- c('mmu_mir-1-3p','mmu_mir-1-5p','mmu-mir-3-5p','mmu-mir-6-3p')  #factor
new_aa <- c('12854','36','5489','2563')  #numeric
new_df <- data.frame(new_nam,new_aa)
Run Code Online (Sandbox Code Playgroud)

r filter match partial dataframe

2
推荐指数
1
解决办法
3170
查看次数

使用 r 对每一行进行条件计数

我尝试了所有解决方案,但我的问题仍然存在。我有一个很大的 df (20rows*400cols) - 对于每一行,我想计算有多少列的值超过 16。

第一个列是因子,其余的列是整数。

我的 df:

col1 col2 col3 col4
abc   2    16   17    
def   4    2    4     
geh   50   60   73 
Run Code Online (Sandbox Code Playgroud)

所需的输出应该是:

col1 col2 col3 col4 count
abc   2    16   17    1
def   4    2    4     0
geh   50   60   73    3
Run Code Online (Sandbox Code Playgroud)

我试过了,df$morethan16 <- rowSums(df[,-1] > 16) 但后来我进入NAcount专栏。

r count dataframe dplyr

2
推荐指数
1
解决办法
51
查看次数

如何使用awk进行多次匹配并在每个模式后打印不同数量的行

我有一个包含数千行的大文件,如下所示:

>ENST00001234.1
ACGTACGTACGG
TTACCCAGTACG
ATCGCATTCAGC
>ENST00002235.4
TTACGCAT
TAGGCCAG
>ENST00005546.9
TTTATCGC
TTAGGGTAT
Run Code Online (Sandbox Code Playgroud)

>例如,我想 grep 特定的 id(在符号之后),ENST00001234.1然后想在匹配之后获取行直到下一个>[不管行数]。我想以这种方式一次 grep 大约 63 个 ID。

如果我 grepENST00001234.1ENST00005546.9ids,理想的输出应该是:

>ENST00001234.1
ACGTACGTACGG
TTACCCAGTACG
ATCGCATTCAGC
>ENST00005546.9
TTTATCGC
TTAGGGTAT
Run Code Online (Sandbox Code Playgroud)

我试过了,awk '/ENST00001234.1/ENST00005546.9/{print}'但没有帮助。

bash awk grep bioinformatics fasta

1
推荐指数
1
解决办法
97
查看次数

标签 统计

awk ×3

dataframe ×3

bash ×2

r ×2

bioinformatics ×1

count ×1

dplyr ×1

fasta ×1

filter ×1

grep ×1

match ×1

pandas ×1

partial ×1

python ×1