valores vacio tablas seleccionar reemplazar filtrar filas eliminar datos crear columnas agrupar r replace multiple-columns

vacio - reemplazando valores en una columna con otra columna R



seleccionar columnas en r (4)

Tengo dos tablas en diferentes dimensiones, ahora quiero reemplazar el valor datA $ swl1 con valores en datB $ swl2 según userids.

datos

id swl1 1 0.8 2 0.7 3 0.4 4 0.7 5 0.0

datB

id swl2 1 0.8 3 0.6 5 0.7

salida

datA (aquí swl1 se reemplaza por los nuevos valores en swl2, pero no todos los identificadores tienen nuevos valores, para los que no, los valores originales se conservan)

id swl1 1 0.8 2 0.7 3 0.6 4 0.7 5 0.7

¿como hacer esto?


Puede usar merge para hacer coincidir por id , luego reemplazar en la columna swl1 los elementos de datB que existen:

datC <- merge(datA, datB, all.x=TRUE) datC ## id swl1 swl2 ## 1 1 0.8 0.8 ## 2 2 0.7 NA ## 3 3 0.4 0.6 ## 4 4 0.7 NA ## 5 5 0.0 0.7

Esto coincide con las filas. Ahora, para reemplazar esos valores en la columna swl1 con los valores no NA de la columna swl2 :

datC$swl1 <- ifelse(is.na(datC$swl2), datC$swl1, datC$swl2) datC$swl2 <- NULL datC ## id swl1 ## 1 1 0.8 ## 2 2 0.7 ## 3 3 0.6 ## 4 4 0.7 ## 5 5 0.7


Si desea seleccionar el valor más grande, independientemente de la columna en la que se encuentre, podría intentarlo

library(dplyr) datA <- data.frame(id=c(1,2,3,4,5), swl1=c(0.8, 0.7, 0.4, 0.7, 0.0)) datB <- data.frame(id=c(1,3,5), somename=c(0.8, 0.6, 0.7)) datC <- full_join(datA, datB) datA <- data.frame(id=c(1:5)) datA$swli1 <- apply(datC[, c(''swl1'', ''somename'')], 1, function(x) max(na.omit(x))) > datA id swli1 1 1 0.8 2 2 0.7 3 3 0.6 4 4 0.7 5 5 0.7


IIUC, utilizando data.table v1.9.5 :

require(data.table) setDT(datA)[datB, swl1 := swl2, on = "id"]

datA se actualiza por referencia.


Puede obtener este resultado con una línea de código:

datA$swl1[datA$id %in% datB$id] <- datB$swl2 #> datA # id swl1 #1 1 0.8 #2 2 0.7 #3 3 0.6 #4 4 0.7 #5 5 0.7

Con el operador %in% seleccionamos las entradas de la columna datA$swl1 que pertenecen a las filas con la misma id que las enumeradas en datB . Estos valores en la columna de datA$swl1 se reemplazan con las entradas de la columna datB de datB .