Table of contents

Operation with tables

Pautas generales

Aunque se explicarán más en detalle en cada sección del binario correspondiente, existen una serie de pautas generales que funcionan para una gran mayoría de los comandos.

Para los binarios a los que se les pase algún flag de tabla de entrada (en la mayoría de casos con el flag -i, pero en otros casos como en 'intersect_columns' con los flags -a y -b), dichas tablas pueden venir en formato de texto plano, pero también se pueden cargar comprimidas en gzip utilizando el flag '--compressed_in'. Por ejemplo:

desaggregate_column_data -i patients_and_phens.gz -x 2 --compressed_in -o desaggregated.txt

Además, para aquellos comandos que solo necesiten una tabla de entrada (como 'aggregate_column_data', 'desaggregate_column_data' o 'transpose_table', pero no 'intersect_columns'), se puede utilizar un guión '-' con el flag de input para indicar que el contenido de la tabla proviene por stdout (por ejemplo fruto de un pipe de un comando anterior), pudiendo venir también comprimido. Por ejemplo:

cat patients_and_phens.txt | script_que_devuelve_datos_comprimidos | desaggregate_column_data -i - -x 2 --compressed_in

En los scripts que devuelvan algún tipo de output (generalmente con el flag -o), de manera similar, también se puede utilizar el flag --compressed_out para que el resultado se devuelva comprimido en gzip. Además, si no se indica un flag de output (omitiendo '-o archivo_salida') y el script solo devuelve una tabla, el contenido se devuelve al stdout en vez de ser escrito en archivo, por lo que puede aprovecharse para pipear en otro script. Por ejemplo:

desaggregate_column_data -i patients_and_phens.txt -x 2 --compressed_out | script_que_utiliza_datos_comprimidos

Se pueden usar ambos flags a la vez, de manera que se pueda recibir una tabla comprimida y devolverla también comprimida. Por ejemplo:

desaggregate_column_data -i patients_and_phens.gz -x 2 --compressed_in --compressed_out -o desaggregated.gz

O utilizando pipes:

cat patients_and_phens.txt | script_que_devuelve_datos_comprimidos | desaggregate_column_data -i - -x 2 --compressed_in --compressed_out | script_que_utiliza_datos_comprimidos

Finalmente, el flag --transposed se puede utilizar en todos aquellos scripts que carguen y/o escriban tablas, y al utilizarlo, se aplicará la transposición de la tabla en el momento de carga así como de manera previa a la escritura de la misma.

aggregate_column_data (Click me)

We’ll use this in a table that contains a reference column with repeated values (i.e., an ID) to aggregate values from another column or columns based on that reference. In all instances, we will use the --aggregate flag.

Basic example with a 2-column table, one with the ID and another one with values

In this case, values from the second column will be aggregated based on the values from the first column. To do that, the -i flag references the input table, the --agg_ref_col_index flag is the column we want to use as reference (base 1) and the --agg_col flag is the column we want to aggregate (base 1). Moreover, with the --agg_sep flag, we can choose the separator we want in our aggregated column.

cmdtabs -i tables/cluster_genes_dis_desagg_3cols --aggregate --agg_ref_col_index 1 --agg_sep ',' --agg_col 2
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
as 1,2
zz 3,4

Example with a 3-column table, one being the ID and the other two corresponding to values.

In this case, values from the second and third columns will be aggregated based on the first one.

cmdtabs -i tables/cluster_genes_dis_desagg_3cols --aggregate --agg_ref_col_index 1 --agg_sep ',' --agg_col 2,3
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
as 1,2 20,30
zz 3,4 100,110

Having 2 columns as reference.

If we have two columns as reference and we don't want to aggregate them but we also don't want to lose them, we can use the --agg_ref_col_index flag to select more than one column as reference (as well as selecting more than one aggregation column).

cmdtabs -i tables/cluster_genes_dis_desagg_4cols --aggregate --agg_ref_col_index 1,2 --agg_col 3,4
Input
A as 1 20
A as 2 30
B zz 3 100
B zz 4 110
Output
A as 1,2 20,30
B zz 3,4 100,110

Example with a 3-column table, one being the ID and the other two corresponding to value, and another aggregation function.

Besides concatenating values in our column(s) of interest (default mode), we can also use different methods of aggregation using the --agg_mode flag, such as calculating the average ("mean"), median ("median"), maximum ("max") and minimum values ("min"), sum ("sum"), standard deviation ("std"), variance ("var"), interquartile range ("IQR"), 25th percentile ("P25"), 75th percentile ("P75") as well as counts ("count").

Let's see and example with the average of values from columns 2 and 3 based on column 1.

cmdtabs -i tables/cluster_genes_dis_desagg_3cols --aggregate --agg_ref_col_index 1 --agg_col 2,3 --agg_mode mean
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
as 1.5 25.0
zz 3.5 105.0

Example of aggregation of counts.

Useful to obtain a table with the ID in one column and the number of times said ID appears in the table when it was desaggregated in the other column.

cmdtabs -i tables/cluster_genes_dis_desagg_3cols --aggregate --agg_ref_col_index 1 --agg_col 2 --agg_mode count
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
as 2
zz 2

column_filter (Click me)

Se utiliza para filtrar registros de una o más tablas en funcion a una o varias keywords en una o más columnas

Ejemplo básico

Este script permite filtrar registros de una o varias tablas (si se usa el wildcard * en un path a archivo del flag -i se pueden cargar varias tablas y aplicar todo lo de este apartado para varias tablas, aunque en estos ejemplos se mostrará el caso solo para una tabla) en función de una o varias keywords aplicada a una o más columnas, por lo que es un script bastante versatil y completo, aunque pueda parecer complejo. Se enseñarán varios ejemplos aumentando la complejidad del caso para entender mejor su funcionamiento.

Los argumentos más básicos que se usarán siempre serán la tabla de entrada (flag -i), las columnas que se devolverán (flag -c), la columna que contiene las keywords (flag -f), la keyword/s a buscar (flag -k), -m o --match_mode para indicar si queremos que la keyword esté incluida (opción "i") en la columna (es decir match parcial) o que esté al completo (opción "c"), es decir, match completo. Finalmente con el flag -s o --search se indica (cuando queremos match en varias columnas) si queremos que el match sea completo (opción "c"), es decir, que se cumpla la keyword buscada en cada columna, o algún (some) match en alguna columna (opción "s")

.

Lo más esencial es entender como se construye el string de keywords de búsqueda. El patrón es el siguiente: key1_col1&key2_col1%key1_col2&key2_col2 donde cada keyword se separa por un "&" (quieres un keyword u otro en una determinada columna) y cada columna por un "%"

Vamos empezar con un caso básico en el que vamos a quedarnos con aquellos registros que contengan la keyword MONDO:0017999 (en flag -k) en la columna 1 (flag -f) de la tabla long_disease_cluster (flag -i). Además queremos que sea el match completo de la palabra (-m c) y nos retorne las columnas 1 y 2 de los registros resultantes (flag -c)

column_filter -i tables/long_disease_cluster -c 1,2 -f 1 -k MONDO:0017999 -s c -m c
Input
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 36_rand
MONDO:0017999 53_ref
MONDO:0017999 53_rand
MONDO:0011142 53_rand
MONDO:0009833 53_ref
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand
Output
MONDO:0017999 36_rand
MONDO:0017999 53_ref
MONDO:0017999 53_rand

Match completo en TODAS las columnas indicadas (dos keys, una en cada columna)

Como vemos visto, el ejemplo anterior nos devuelve varios MONDOs que cumplen la condición de match completo en la columna 1. Vamos a ampliar el caso anterior para que solo nos devuelva el MONDO que en la segunda columna (flag -f) tiene el cluster '53_ref'

column_filter -i tables/long_disease_cluster -c 1,2 -f 1,2 -k MONDO:0017999%53_ref -s c -m c
Output
MONDO:0017999 53_ref

Buscar dos (o más registros) en una misma columna (match exacto)

Vamos a obtener las filas que contienen o bien "MONDO:0008995" o bien "MONDO:0013969".

column_filter -i tables/long_disease_cluster -c 1,2 -f 1 -k MONDO:0008995&MONDO:0013969 -s c -m c
Output
MONDO:0008995 19_ref
MONDO:0013969 1189_rand

Match parcial en la segunda columna

Vamos a obtener las filas que contengan el substring "ref" en la segunda columna (cambiando el flag -m o --mode a i (de include)).

column_filter -i tables/long_disease_cluster -c 1,2 -f 2 -k ref -s c -m i
Output
MONDO:0008995 19_ref
MONDO:0014823 25_ref
MONDO:0017999 53_ref
MONDO:0009833 53_ref
MONDO:0010193 54_ref
MONDO:0011142 66_ref

Match parcial reverso en la segunda columna

Si lo que nos interesa no es obtener los registros que cumplen el patrón, sino los que no lo cumplen, podemos usar el flag -r o --reverse. Esto es válido tanto para un match completo como parcial. En este caso vamos a enseñar el mismo ejemplo que el anterior, pero con el caso reverso, por lo que en vez de obtener los registros que contienen "ref", obtendremos los que no lo contienen ("rand")

column_filter -i tables/long_disease_cluster -c 1,2 -f 2 -k ref -s c -m i --reverse
Output
MONDO:0007172 22_rand
MONDO:0017999 36_rand
MONDO:0017999 53_rand
MONDO:0011142 53_rand
MONDO:0009594 54_rand
MONDO:0012176 62_rand
MONDO:0013969 1189_rand

Match parcial en TODAS las columnas especificadas (dos columnas)

En el caso que filtrabamos por MONDO:0017999 en la primera columna, vimos que encontrabamos 3 clústeres, 36_rand, 53_ref y 53_rand. En este caso, para quedarnos con distintos subsets, podemos utilizar el match parcial. Por ejemplo, para quedarnos con los MONDO:0017999 del cluster 53

column_filter -i tables/long_disease_cluster -c 1,2 -f 1,2 -k MONDO:0017999%53 -s c -m i
Output
MONDO:0017999 53_ref
MONDO:0017999 53_rand

Y para quedarnos con los MONDO:0017999 de clusteres random

column_filter -i tables/long_disease_cluster -c 1,2 -f 1,2 -k MONDO:0017999%rand -s c -m i
Output
MONDO:0017999 36_rand
MONDO:0017999 53_rand

Match exacto en ALGUNA de las columnas especificadas (dos columnas)

Hasta ahora hemos estado viendo como hacer matches que se cumplan en todas las columnas. Si queremos buscar keywords en varias columnas pero que el patrón se cumpla solo en ALGUNA de las columnas, podemos cambiar el -s o --search a "s" (some)

Por ejemplo, si queremos quedarnos con los registros que contengan MONDO:0008995 o MONDO:0013969 en la primera columna o 22_rand o 66_ref en la segunda columna, podemos hacer lo siguiente:

column_filter -i tables/long_disease_cluster -c 1,2 -f 1,2 -k MONDO:0008995&MONDO:0013969%22_rand&66_ref -s s -m c
Output
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand

create_metric_table (Click me)

Pasa una tabla del formato long al formato wide

En ocasiones, al trabajar con flujos como el de autoflow, lanzamos tareas paralelizadas con distintas conmbinaciones de trabajo, por ejemplo: red (ORPHA y MONDO) y tipo de clustering (CPM y HLC) y volcamos distintas métricas en un archivo común, del estilo:

ORPHA CPM N_CLUSTERS 500
ORPHA CPM CLUSTER_SIZE 10
ORPHA HLC N_CLUSTERS 600
ORPHA HLC CLUSTER_SIZE 12
MONDO CPM N_CLUSTERS 550
MONDO CPM CLUSTER_SIZE 11
MONDO HLC N_CLUSTERS 650
MONDO HLC CLUSTER_SIZE 13

En lo que vemos que las dos primeras columnas son factores (red y tipo de clustering), la tercera es la métrica medida y la cuarta es el valor que toma la misma. Que es lo que se llamaría el formato "long" de una tabla (ejemplo de casos long y wide) Sin embargo, para poder utilizar algunos métodos de graficado de CanvasXpress o para ver la tabla de métricas de una forma más sencilla, necesitamos transformar esta tabla a un formato "wide". Es en este caso cuando se utiliza el método create_metric_table.

Ejemplo básico

Este método es un tanto especial en cuanto a la mayoría de sus parámetros son posicionales. Por orden, los argumentos son:

  1. tabla de entrada
  2. nombres para las columnas de los factores en la tabla de salida (separados por comas)
  3. nombre para la tabla de salida

Siendo los tres obligatorios.

Imaginando que tenemos una tabla de entrada con las columnas que representan "nombre de la red, tipo de clustering, tipo de red, métrica, valor" , el comando sería algo como:

create_metric_table tables/long_table red,metodo,tipo outputs/wide_table
Input
red1 HLC genes cl_num 1988
red1 HLC genes cl_size_mean 10
red2 CPM genes cl_num 2000
red2 CPM genes cl_size_mean 15
red3 HLC phenotypes cl_num 3000
red3 HLC phenotypes cl_size_mean 20
red4 CPM phenotypes cl_num 4000
red4 CPM phenotypes cl_size_mean 25
Output
red metodo tipo cl_num cl_size_mean
red1 HLC genes 1988 10
red2 CPM genes 2000 15
red3 HLC phenotypes 3000 20
red4 CPM phenotypes 4000 25

Definir otra tabla para volcar los registros corruptos

Opcionalmente, se puede pasar un flag -c para devolver otra tabla con los valores corruptos, es decir, aquellos que no se han podido transformar a formato wide porque falta algún valor de los factores.

desaggregate_column_data (Click me)

Se utiliza en una tabla para dada una columna como referencia, que tenga valores repetidos, por ejemplo un identificador, agregarte el/los valores de otra(s) columna(s) en función de la de referencia.

Ejemplo básico con una tabla con tres columnas, donde hay dos sin agregar y otra agregada.

En este caso, se desagregan los valores de la tercera columna, amoldando el resto de columnas según la cantidad de valores en cada fila de la tercera columna. Para ello el flag -i hace referencia a la tabla de entrada, el flag -x a la columna que queremos desagregar (en base 1). Con el flag -s indicamos el separador que se ha utilizado en esa columna agregada.

desaggregate_column_data -i tables/cluster_genes_dis_agg -x 3 -s ,
Input
HGNC:21197 mRNA 483_ref,1039_ref,1071_ref
HGNC:21143 mRNA 211_ref,4705_ref
HGNC:21457 tRNA 305_ref,304_ref
Output
HGNC:21197 mRNA 483_ref
HGNC:21197 mRNA 1039_ref
HGNC:21197 mRNA 1071_ref
HGNC:21143 mRNA 211_ref
HGNC:21143 mRNA 4705_ref
HGNC:21457 tRNA 305_ref
HGNC:21457 tRNA 304_ref

Ejemplo básico con una tabla con cuatro columnas, donde hay dos sin agregar y dos agregada.

Si existe más de una columna agregada, se puede indicar con el flag -x, separándolas por comas. Se asume que todos las columnas agregadas van a tener la misma cantidad de elementos para una determinada fila (ejemplo 1 columna con pat1,pat2,pat y otra con male,male,female).

desaggregate_column_data -i tables/cluster_genes_dis_agg2 -x 3,4 -s ,
Input
HGNC:21197 mRNA SNP1,SNP3,SNP4 483_ref,1039_ref,1071_ref
HGNC:21143 mRNA SNP5,SNP6 211_ref,4705_ref
HGNC:21457 tRNA SNP12,SNP13 305_ref,304_ref
Output
HGNC:21197 mRNA SNP1 483_ref
HGNC:21197 mRNA SNP3 1039_ref
HGNC:21197 mRNA SNP4 1071_ref
HGNC:21143 mRNA SNP5 211_ref
HGNC:21143 mRNA SNP6 4705_ref
HGNC:21457 tRNA SNP12 305_ref
HGNC:21457 tRNA SNP13 304_ref

excel_to_tabular (Click me)

Convert table from excel to plain format (CSV, TSV and similar).

Basic example

This example shows how to convert a table from excel to plain format (CSV, TSV and similar). The two-sheet excel file is as follows:

Let's extract the first three columns from the first sheet of the file special_files/scRNAseq.xlsx and convert it to plain tabular format. We will use the -i flag to specify input file, -c to select columns to extract and -s for the sheet to retrieve data from.

cmdtabs -i special_files/scRNAseq.xlsx --file_type excel --excel_cols 1,2,3 --excel_sheet_number 1
Output
genes cell1 cell2
gene1 3 0
gene2 0 4
gene3 0 0
gene25000 0 3

Extracting the first two and last two columns from the second sheet

In this case, we extract the first two and last two columns from the second sheet in the same file

cmdtabs -i special_files/scRNAseq.xlsx --file_type excel --excel_cols 1-2,4-5 --excel_sheet_number 2
Output
genes cell5 cell7 cell15000
gene5 36 3 54
gene6 0 67 5
gene8 50 3 9
gene25000 6 87 8

Extract all columns from the first sheet

If we wish to extract all columns without specifying all of them we can just leave the --excel_cols argument empty, which signals for the extraction of every column.

cmdtabs -i special_files/scRNAseq.xlsx --file_type excel --excel_sheet_number 1
Output
genes cell1 cell2 cell3 cell10000
gene1 3 0 7 4
gene2 0 4 5 5
gene3 0 0 4 0
gene25000 0 3 0 0

Extracting select rows

In addition to columns, the user can also choose which rows to extract from the table. By default, every row is extracted, but we can extract a selection.

In this case we are extracting rows 1,3 and columns 1,3,4 from the first sheet

cmdtabs -i special_files/scRNAseq.xlsx --file_type excel --excel_rows 1,3 --excel_cols 1,3,4 --excel_sheet_number 1
Output
genes cell2 cell3
gene2 4 5

filter_by_list (Click me)

Se utiliza para filtrar las filas que nos interesan de una o más tablas en función a una serie de valores que se pasan

Ejemplo básico

Tenemos nuestra tabla con la primera columna teniendo el identificador de una red (la que nos interesa para poder filtrar), y las otras columnas siendo factores y metrica-valor. Tenemos otro archivo en el que tenemos los identificadores de las redes que queremos filtrar (red1 y red3).

Pasamos la tabla de interés tabla como input al flag -i y la columna en la que están los valores que filtrarán las filas con el flag -c. El archivo de una columna con los IDs de redes que queremos filtrar se pasan al flag -t. Pasamos el path a la carpeta (si, a una carpeta, ya que el flag de input -f puede aceptar más de una tabla, separada por comas, para ser filtrada) en el que queremos que se escriba la/s tabla/s filtrada/s con el flag -o y podemos añadir un prefijo para el nombre de la tabla de salida si nos interesa (en este caso usamos "filtered_" en este caso) con el flag --prefix

filter_by_list -f tables/long_table -c 1 -t tables/nets_to_filter --prefix filtered_ -o outputs
Input
red1 HLC genes cl_num 1988
red1 HLC genes cl_size_mean 10
red2 CPM genes cl_num 2000
red2 CPM genes cl_size_mean 15
red3 HLC phenotypes cl_num 3000
red3 HLC phenotypes cl_size_mean 20
red4 CPM phenotypes cl_num 4000
red4 CPM phenotypes cl_size_mean 25
Archivo de 1 columna con los registros que queremos filtrar
red1
red3
Output
red1 HLC genes cl_num 1988
red1 HLC genes cl_size_mean 10
red3 HLC phenotypes cl_num 3000
red3 HLC phenotypes cl_size_mean 20

Usar un match complementario (usar los términos como blacklist en vez de whitelist)

Si en vez de querer quedarnos con todas las filas que tengan los términos de la tabla que pasamos con el flag -t, queremos quedarnos con todas las filas que no tengan esos términos, podemos activar el flag booleano --blacklist.

Repitiendo el mismo ejemplo anterior, pero activando ese flag, tenemos:

filter_by_list -f tables/long_table -c 1 -t tables/nets_to_filter --prefix blackfiltered_ -o outputs --blacklist
Input
red1 HLC genes cl_num 1988
red1 HLC genes cl_size_mean 10
red2 CPM genes cl_num 2000
red2 CPM genes cl_size_mean 15
red3 HLC phenotypes cl_num 3000
red3 HLC phenotypes cl_size_mean 20
red4 CPM phenotypes cl_num 4000
red4 CPM phenotypes cl_size_mean 25
Archivo de 1 columna con los registros que queremos omitir
red1
red3
Output
red2 CPM genes cl_num 2000
red2 CPM genes cl_size_mean 15
red4 CPM phenotypes cl_num 4000
red4 CPM phenotypes cl_size_mean 25

Match parcial (vale tanto para whitelist como para blacklist)

Si en vez de querer filtrar los elementos de la tabla por un match exacto, queremos que sea por un match parcial, podemos activar el flag booleano --not_exact_match

En la tabla siguiente, vamos a quedarnos con todos los clústeres de referencia y descartar los random, indicando que los valores que queremos filtrar en nuestra tabla de entrada dada con el flag -i están en la segunda columna (-c 2) y el archivo que pasamos para filtrar con el flag -t solo tiene el valor 'ref', que será usado para hacer un match parcial al haber usado el flag --not_exact_match

filter_by_list -f tables/disease_cluster_ref_rnd -c 2 -t tables/clusts_to_filter --prefix ref_filtered_ -o outputs --not_exact_match
Input
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 53_rand
MONDO:0009833 53_ref
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand
Archivo de 1 columna con los registros que queremos filtrar
ref
Output
MONDO:0008995 19_ref
MONDO:0014823 25_ref
MONDO:0009833 53_ref
MONDO:0010193 54_ref
MONDO:0011142 66_ref

Filtrar múltiples tablas

Como se ha comentado antes, el flag -f acepta múltiples tablas separadas por comas. Es por ello que el flag -o para el output indica carpeta de salida y no archivo de salida. Además, si vamos a escribir los archivos en la misma carpeta, podemos utilizar el flag --prefix para que no se escriban con el mismo nombre y nos reemplacen las tablas de entrada.

Por lo tanto, podemos filtrar varias tablas a la vez utilizando el mismo archivo de filtrado. Esto es util si tenemos distintos archivos de métricas con los mismos identificadores y queremos filtrar todos ellos por los mismos términos.

get_columns (Click me)

Extract a selection of columns from the original table

Basic example using numeric indices to select columns

Input table is provided with flag -i. Columns to extract are selected with flag -c (comma-separated 1-based numeric indices), using a hyphen (-) so select a column range.

In this case, we will extract columns 1, 3, 4 and 5. We will do so by selecting column 1 and the 3-5 interval.

cmdtabs -i tables/simple_table --extract_cols 1,3-5
Input
col-1 col-2 col-3 col-4 col-5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
Output
col-1 col-3 col-4 col-5
1 3 4 5
6 8 9 10
11 13 14 15

Using column names if header flag is present

If flag -H is active, it means the table has a header. If that is the case we can select columns by specifying their name, again selecting multiple by separating them by commas. (NOTE: even if the table has a header, columns may be selected by numerical index without activating the -H flag, exactly as in the previous example)

In this case, we will select columns col-1, col-3, col-4 and col-5, the same as in the previous example, but this time selecting them by column name. In this case it is also possible to select a range of columns, but in this case by using the "%-%" sequence of characters (as the hyphen may also be a part of the column name, as was chosen for this example)

cmdtabs -i tables/simple_table -H --extract_cols col-1,col-3%-%col-5
Input
col-1 col-2 col-3 col-4 col-5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
Output
col-1 col-3 col-4 col-5
1 3 4 5
6 8 9 10
11 13 14 15

intersect_columns (Click me)

Un script muy versatil en torno a la unión de dos tablas

Ejemplo básico

El caso más básico será obtener los registros comunes de dos columnas de dos tablas distintas. Para este caso (además de todos los siguientes) el funcionamiento es simple: tenemos los flag -a y -b para indicar las dos tablas de interés, y los flags -A y -B para indicar las columnas de interés en las respectivas tablas. El flag -s nos servirá para indicar el separador (tabulador por defecto). Por defecto se obtienen los identificadores que estén en las dos tablas (inner join), que es el valor por defecto del flag --keep, aunque luego veremos otros casos de uso

Vamos a ver un ejemplo con dos tablas , ambas con una columna que tienen identificadores de enfermedad de MONDO, para encontrar los registros comunes entre ambas tablas.

intersect_columns -a tables/disease_cluster -b tables/disease_gene -A 1 -B 1 -s \t
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla B
MONDO:0010193 HGNC:3527 tRNA
MONDO:0008995 HGNC:16873 mRNA
MONDO:0012866 HGNC:21197 mRNA
Output
MONDO:0008995
MONDO:0010193

Obtener el resto de columnas para los registros comunes encontrados

Si no nos interesa obtener solo los registros comunes de las dos tablas en esa columna, sino también obtener el resto de columnas de ambas tablas, podemos usar el flag -full

intersect_columns -a tables/disease_cluster -b tables/disease_gene -A 1 -B 1 -s \t --keep c --full
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla B
MONDO:0010193 HGNC:3527 tRNA
MONDO:0008995 HGNC:16873 mRNA
MONDO:0012866 HGNC:21197 mRNA
Output
MONDO:0008995 19_ref MONDO:0008995 HGNC:16873 mRNA
MONDO:0010193 54_ref MONDO:0010193 HGNC:3527 tRNA

Obtener registros específicos de tabla

Hemos visto antes un ejemplo de inner join, que es el caso por defecto. Con el binario de table_linker podemos también podemos utilizar los casos de left join. y right join.

No obstante, con intersect_columns podemos podemos obtener los registros específicos de una tabla, ya sea la A o la B, utilizando el flag --keep. Por ejemplo, si queremos quedarnos con los registros que son específicos de la tabla A, podemos usar el flag --keep a. Y si además nos interesa quedarnos con el resto de columnas de la tabla A para los registros específicos de esta tabla, también podemos usar el flag --full. En el próximo ejemplo, enseñamos como devolver los registros específicos de la tabla A , pero sin devolver el resto de columnas (que podríamos hacer con el flag --full)

intersect_columns -a tables/disease_cluster -b tables/disease_gene -A 1 -B 1 --keep a
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla B
MONDO:0010193 HGNC:3527 tRNA
MONDO:0008995 HGNC:16873 mRNA
MONDO:0012866 HGNC:21197 mRNA
Output
MONDO:0007172

De la misma manera, si queremos quedarnos con los registros específicos de la tabla B, podemos usar el flag --keep b. Finalmente, si queremos los registros específicos de la tabla A y los específicos de la tabla B, podemos usar el flag --keep ab (este caso sería el complementario de --keep c, en el que se obtenían los comunes de ambos). Vamos a mostrar este caso, devolviendo además el resto de columnas de las 2 tablas para esos registros

intersect_columns -a tables/disease_cluster -b tables/disease_gene -A 1 -B 1 --keep ab --full
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla B
MONDO:0010193 HGNC:3527 tRNA
MONDO:0008995 HGNC:16873 mRNA
MONDO:0012866 HGNC:21197 mRNA
Output
MONDO:0007172 22_ref
MONDO:0012866 HGNC:21197 mRNA

merge_tabular (Click me)

Se utiliza para realizar un merge de N cantidad de tablas en base a su primera columna con identificadores compartidos.

Ejemplo básico

En este script, el argumento para las tablas de entrada es posicional (pudiendo unir N cantidad de tablas), con los paths a las tablas a unir separadas por espacios. Tiene un argumento, --fill_character, que se utiliza para rellenar los campos vacíos (aquellos registros que en una tabla tienen datos pero en otra no), que por defecto está a "-"

En este caso, se unen las tablas tables/disease_cluster, tables/disease_gene y tables/mondo_to_orpha, y se rellenan los campos vacíos con "NA".

merge_tabular tables/disease_cluster tables/disease_gene tables/mondo_to_orpha --fill_character 'NA'
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Segunda tabla
MONDO:0010193 HGNC:3527 tRNA
MONDO:0008995 HGNC:16873 mRNA
MONDO:0012866 HGNC:21197 mRNA
Tercera tabla
MONDO:0008995 ORPHA:3472
MONDO:0012866 ORPHA:171629
Output
MONDO:0008995 19_ref HGNC:16873 mRNA ORPHA:3472
MONDO:0007172 22_ref NA NA NA
MONDO:0010193 54_ref HGNC:3527 tRNA NA
MONDO:0012866 NA HGNC:21197 mRNA ORPHA:171629

records_count (Click me)

Se utiliza para obtener el número de ocurrencias de todos los términos en una columna de una tabla

Ejemplo básico

Se indica la tabla a utilizar con el flag -i y la columna (indice basado en 1) en la que queremos obtener los conteos con el flag -x

Vamos a ver la cantidad de ocurrencias de los distintos términos en la columna 2 de la tabla 'cluster_genes_dis_agg'

records_count -i tables/cluster_genes_dis_agg -x 2
Input
HGNC:21197 mRNA 483_ref,1039_ref,1071_ref
HGNC:21143 mRNA 211_ref,4705_ref
HGNC:21457 tRNA 305_ref,304_ref
Output
mRNA 2
tRNA 1

standard_name_replacer (Click me)

We'll use this when we have a table that contains a column with IDs (i.e., ensemblIDs and associated GO terms) and another table that we want to use as a dictionary to translate certain values for different ones (i.e., a table with ensemblIDs and their corresponding gene symbol).

Basic example

We have a table with MONDO IDs and the cluster(s) where that MONDO disease has been found. We also have a file that correlates each MONDO ID with its corresponding ORPHA ID. We'll use the latter to translate all MONDO IDs to ORPHA IDs in the first table.

We'll use the -i flag to specify the input table (the first table in our case) and the -I flag for the dictionary (second table). We will then use the -c flag to select the column we want to translate, the --from flag to indicate which column from the dictionary table we want to use as the search key and the --to flag to select the column in the dictionary that contains the terms we want to use for replacing in the first table.

cmdtabs -i tables/disease_cluster -I tables/mondo_to_orpha -c 1 --from 1 --to 2
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla diccionario para reemplazar
MONDO:0008995 ORPHA:3472
MONDO:0012866 ORPHA:171629
Output
ORPHA:3472 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref

Removing untranslated entries

As we can observe in the previous example, if an ID term from the input file is not present in the dictionary, that ID remains untranslated. If we want to remove any untranslated entries, we can add the -u flag to the command.

cmdtabs -i tables/disease_cluster -I tables/mondo_to_orpha -c 1 --from 1 --to 2 -u
Input
MONDO:0008995 19_ref
MONDO:0007172 22_ref
MONDO:0010193 54_ref
Tabla diccionario para reemplazar
MONDO:0008995 ORPHA:3472
MONDO:0012866 ORPHA:171629
Output
ORPHA:3472 19_ref

subset_table (Click me)

Se utiliza para obtener un subset de la tabla original, empezando por la fila X y cogiendo Y filas desde ahí.

Ejemplo básico

La tabla de entrada se indica con el flag -i. La fila por la que se empieza con el flag -s o --start_line (indice basado en 1) y la cantidad de filas que se extraen desde ese punto con el flag -l o --lines_to_subset. Además, si la tabla original tiene un header y se quiere mantener en la tabla subseteada, se puede utilizar el flag -H o --header

En este caso, vamos a coger 4 filas de la tabla de métricas, empezando por la fila 3 y manteniendo el header.

subset_table -i tables/metrics_table -s 3 -l 4 -H
Input
sample initial_total_sequences initial_read_max_length initial_read_min_length initial_%gc
CTL_1_cell 11437331.0 76.0 35.0 45.0
CTL_1_exo 10668412.0 76.0 35.0 48.0
CTL_2_cell 20503996.0 76.0 35.0 44.0
CTL_2_exo 9322480.0 76.0 35.0 47.0
CTL_3_cell 20342853.0 76.0 35.0 46.0
CTL_3_exo 18394272.0 76.0 35.0 48.0
CTL_4_cell 15729473.0 76.0 35.0 45.0
CTL_4_exo 12505200.0 76.0 35.0 49.0
CTL_5_cell 12829784.0 76.0 35.0 45.0
CTL_5_exo 9072750.0 76.0 35.0 49.0
DOX_1_cell 37629252.0 76.0 35.0 45.0
DOX_1_exo 21945299.0 76.0 35.0 46.0
DOX_2_cell 17915632.0 76.0 35.0 44.0
DOX_2_exo 5919977.0 76.0 35.0 50.0
Output
sample initial_total_sequences initial_read_max_length initial_read_min_length initial_%gc
CTL_2_cell 20503996.0 76.0 35.0 44.0
CTL_2_exo 9322480.0 76.0 35.0 47.0
CTL_3_cell 20342853.0 76.0 35.0 46.0
CTL_3_exo 18394272.0 76.0 35.0 48.0

Partiendo toda la tabla en distintos archivos con K líneas cada uno

Si se quiere partir la tabla en distintos archivos, cada uno con K líneas, se puede utilizar el flag -k o --chunk_size en vez de los flags -s y -l. En este caso el flag de output -o indica la carpeta donde se guardarán los archivos.

En este caso, vamos a partir la tabla de clusters de enfermedades en distintos archivos, cada uno con 4 líneas (veremos que el ultimo se queda con 2, ya que la tabla inicial tiene 10 registros)

subset_table -i tables/disease_cluster_ref_rnd -k 4 -o outputs/subset_table
Input
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 53_rand
MONDO:0009833 53_ref
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand
disease_cluster_ref_rnd_chunk1
MONDO:0009833 53_ref
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
disease_cluster_ref_rnd_chunk0
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 53_rand
disease_cluster_ref_rnd_chunk2
MONDO:0011142 66_ref
MONDO:0013969 1189_rand

Partiendo toda la tabla en N archivos diferentes con la misma cantidad de registros cada uno

Si se quiere partir la tabla en una cantidad fija de N archivos , cada uno de ellos con la misma cantidad de registros, se puede utilizar el flag -n o --number_of_files en vez de los flags -s y -l o --chunk_size. En este caso el flag de output -o también indica la carpeta donde se guardarán los archivos.

En este caso, vamos a partir la tabla de clusters de enfermedades en 2 archivos

subset_table -i tables/disease_cluster_ref_rnd -n 2 -o outputs/subset_table2
Input
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 53_rand
MONDO:0009833 53_ref
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand
disease_cluster_ref_rnd_chunk1
MONDO:0009594 54_rand
MONDO:0010193 54_ref
MONDO:0012176 62_rand
MONDO:0011142 66_ref
MONDO:0013969 1189_rand
disease_cluster_ref_rnd_chunk0
MONDO:0008995 19_ref
MONDO:0007172 22_rand
MONDO:0014823 25_ref
MONDO:0017999 53_rand
MONDO:0009833 53_ref

tag_table (Click me)

Añade una o varias etiquetas (ej: factores adicionales de una variable y su valor) a todas las filas de una tabla

Ejemplo básico utilizando un string con tags separador por comas

Se pasa la tabla a la que se quiere añadir los tags con el flag -i y un string con los tags separados por comas al flag -t

tag_table -i tables/cluster_stats -t red1,colapsada,traducida
Input
cl_num 1988
cl_size_min 1
cl_size_max 296
cl_size_median 3.0
cl_size_mean 4.667505030181086
cl_nodes_mean 1.0
cl_nodes 9279
cl_pairs 147578
Output
red1 colapsada traducida cl_num 1988
red1 colapsada traducida cl_size_min 1
red1 colapsada traducida cl_size_max 296
red1 colapsada traducida cl_size_median 3.0
red1 colapsada traducida cl_size_mean 4.667505030181086
red1 colapsada traducida cl_nodes_mean 1.0
red1 colapsada traducida cl_nodes 9279
red1 colapsada traducida cl_pairs 147578

Ejemplo pasando el nombre de un archivo como tag al flag -t

Si en vez de pasarle un string separado por comas con los tags, se le pasa el nombre de un archivo, cmdtabs puede reconocerlo y en ese caso cargar el contenido del archivo para utilizarlo como tags. Se especifica en este caso con el flag -s cual es el separador en ese archvio

tag_table -i tables/cluster_stats -t tables/tracker -s
Input
cl_num 1988
cl_size_min 1
cl_size_max 296
cl_size_median 3.0
cl_size_mean 4.667505030181086
cl_nodes_mean 1.0
cl_nodes 9279
cl_pairs 147578
Tabla usada en el flag -t con los tags a añadir a la tabla de entrada (1 fila con los valores separados por tabulación)
MERGED_net_no_raw_cpm MERGED no no cpm
Output
MERGED_net_no_raw_cpm MERGED no no cpm cl_num 1988
MERGED_net_no_raw_cpm MERGED no no cpm cl_size_min 1
MERGED_net_no_raw_cpm MERGED no no cpm cl_size_max 296
MERGED_net_no_raw_cpm MERGED no no cpm cl_size_median 3.0
MERGED_net_no_raw_cpm MERGED no no cpm cl_size_mean 4.667505030181086
MERGED_net_no_raw_cpm MERGED no no cpm cl_nodes_mean 1.0
MERGED_net_no_raw_cpm MERGED no no cpm cl_nodes 9279
MERGED_net_no_raw_cpm MERGED no no cpm cl_pairs 147578

Pasar más de un archivo separado por comas al flag -t

Si le pasamos varios archivos separados por comas, leerá y utilizará cada uno de ellos para añadir los tags

tag_table -i tables/cluster_stats -t tables/tracker,tables/tracker -s
Input
cl_num 1988
cl_size_min 1
cl_size_max 296
cl_size_median 3.0
cl_size_mean 4.667505030181086
cl_nodes_mean 1.0
cl_nodes 9279
cl_pairs 147578
Tablas usadas en el flag -t con los tags a añadir a la tabla de entrada (1 fila con los valores separados por tabulación)
MERGED_net_no_raw_cpm MERGED no no cpm
Output
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_num 1988
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_size_min 1
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_size_max 296
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_size_median 3.0
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_size_mean 4.667505030181086
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_nodes_mean 1.0
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_nodes 9279
MERGED_net_no_raw_cpm MERGED no no cpm MERGED_net_no_raw_cpm MERGED no no cpm cl_pairs 147578

transform_to_latex (Click me)

Se utiliza para convertir una tabla en formato TSV,CSV, etc en una tabla con la sintaxis necesaria para ser añadida a LaTeX

Ejemplo básico

Se da la tabla con el flag -i

transform_to_latex -i tables/cluster_genes_dis_desagg_3cols
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
\hline
as & 1 & 20 \\ \hline
as & 2 & 30 \\ \hline
zz & 3 & 100 \\ \hline
zz & 4 & 110 \\ \hline

Añadiendo el backbone

Si se quiere obtener un backbone algo más detallado con el que luego rellenar los campos restantes, se puede utilizar el parámetro --whole o -w

transform_to_latex -i tables/cluster_genes_dis_desagg_3cols --whole
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
\begin{table}[!htbp]
\centering
\caption{}
\begin{tabular}{|l|l|l|}
\hline
as & 1 & 20 \\ \hline
as & 2 & 30 \\ \hline
zz & 3 & 100 \\ \hline
zz & 4 & 110 \\ \hline
\end{tabular}
\label{table:cluster_genes_dis_desagg_3cols}
\end{table}

transpose_table (Click me)

Se utiliza para transponer una tabla

Ejemplo básico

Se transpone la tabla que se da con el flag -i

transpose_table -i tables/cluster_genes_dis_desagg_3cols
Input
as 1 20
as 2 30
zz 3 100
zz 4 110
Output
as as zz zz
1 2 3 4
20 30 100 110