Foro de debate

Crear dataframe de secuencias asociadas a otro valor

 
Imagen de Sebastian F
Crear dataframe de secuencias asociadas a otro valor
de Sebastian F - lunes, 19 de agosto de 2019, 03:34
 

Hola:

Soy Sebastián y estoy aprendiendo R para utilizarlo en mi trabajo (anlisis de secuencias de DNA, epidemiología molecular). Creo ser usuario básico y me encontré con el siguiente problema:

Tengo dos dataframes

df1: contiene la misma secuencia de DNA (sin gaps) y asociado a un valor.

df2: contiene una secuencia de DNA con gaps (-) dado que proviene de un alineamiento múltiple.

Mi idea es asociar en un tercer df (df3) ambos dataframes (df1 y df2), pero respetando el alineamiento de cada nucleótido (A o T o G o C) y en las posiciones donde no encuentre un nucleótido (gap) asociar un valor x, que en este caso puede ser 0 (cero).

Por ejemplo

df1

BASENITROGENADA VALOR

A                                   134

T                                   178

C                                   215

G                                   089

df2

BASENITROGENADA

A

T

C

-

G

df3

BASENITROGENADA VALOR

A                                   134

T                                   178

C                                   215

-                                    0

G                                   089

Al tratar de hacer un cbind, me sale el siguiente error:

Error in data.frame(..., check.names = FALSE) : 



  arguments imply differing number of rows: 4, 5

¿Cómo puedo asociar esos valores? A través de un paquete especial, utilizando algún tipo de merge o definitivamente usar una función ("for" por ejemplo).

Queda atento a sus comentarios y preguntas

Se despide 

Sebastián Peña

Imagen de Manuel Muñoz Márquez
Re: Crear dataframe de secuencias asociadas a otro valor
de Manuel Muñoz Márquez - martes, 20 de agosto de 2019, 07:02
 

Buenas:

¿Las filas del primer y el segundo data.frame se corresponden siempre?

Si fuese así, bastaría con:

df3 <-  df2
df3$VALOR <- df1$VALOR
df3$VALOR[df3$]BASENITROGENADA == '-'] <- 0

Un saludo.