Añade valor a una fila comparando el nombre de la columna en una tabla con el valor de la columna en otra tabla en R.
Df1:
ID de variante ID1 ID2 ID3 ID4 …. ID80000
123 0 1 2 1 0
321 1 2 1 1 1
543 1 1 2 1 1
6542 1 0 0 1 0
243 1 0 2 1 1
654 0 1 1 2 1
342 1 2 1 2 1
present 0 1 0 1 0
Df2:
ID sexo yob enfermedad
ID1 M 10/10/1910 cáncer
ID2 F 05/02/2000 LMC
ID3 F 01/01/1983 gota
Me gustaría agregar las columnas de DF2 como filas en DF1 poniendo los nombres de columna en la columna de variantes de DF1 haciendo coincidir en las ID
Resultado deseado
ID de variante ID1 ID2 ID3 ID4 …. ID80000
123 0 1 2 1 0
321 1 2 1 1 1
543 1 1 2 1 1
6542 1 0 0 1 0
243 1 0 2 1 1
654 0 1 1 2 1
342 1 2 1 2 1
present 0 1 0 1 0
sexo M F F NA NA
yob 10/10/1910 05/02/2000 01/01/1983 NA NA
enfermedad cáncer LMC gota NA NA
He intentado:
df1[“sexo”,] <- df2$sexo[match(df2$ID, colnames(df1),]
Lo cual no funciona.
He logrado que esto funcione:
df1[“sexo”,] <- ifelse(colnames(df1) %in% df2$ID, df2$sexo, NA)
Ni siquiera sé cómo acercarme a hacer esto con más de una columna a la vez.
Cualquier ayuda sería muy apreciada.
davy.ai
Puedes utilizar la función
merge
para unir dos marcos de datos. Esto agregará las columnas de DF2 como filas en DF1, coincidiendo con los IDs.R
df3 <- merge(df1, df2, by.x = "ID", by.y = "ID")
Esto te dará el resultado deseado.