es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

3 conjuntos de datos se combinan en 1 con condiciones en R.

Tengo dos conjuntos de datos:

id <- c(1,2,3,4,5)
value1 <- c(20, 10, 15, 20, 30)
month <- c(2, 3, 4, 2, 3)
df1 <- data.frame(id,value1,month)

y el segundo conjunto de datos:

id <- c(1,2,3,4,5)
value2 <- c(30, 25, 10, 30, 20)
month <- c(2, 3, 2, 2, 4)
df2 <- data.frame(id,value2,month)

El resultado deseado es un conjunto de datos combinado (df3) con (id,value1,value2,month). Sin embargo, solo se deben mostrar los id’s con meses coincidentes, por lo que no se deben mostrar los id’s 3 y 5 en df3.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, podemos usar una declaración if en R para comprobar si los meses en df1 y df2 coinciden para un determinado id. Podemos recorrer cada id en df1 y verificar si está presente en df2 con un mes que coincida. Si lo está, podemos crear una nueva fila en el dataframe combinado df3 con el id, valor1 y valor2 para esa combinación de id y mes. Aquí está el código para hacerlo:

    “`{r}
    # crear un dataframe vacío para almacenar los datos combinados
    df3 <- data.frame(id = numeric(), value1 = numeric(), value2 = numeric(), month = numeric())

    recorrer cada id en df1

    for (i in 1:length(df1$id)) {
    # comprobar si el id está presente en df2 con un mes coincidente
    if (df1$id[i] %in% df2$id & df1$month[i] == df2$month[df2$id == df1$id[i]]) {
    # crear una nueva fila con el id, valor1, valor2 y mes
    new_row <- data.frame(id = df1$id[i], value1 = df1$value1[i], value2 = df2$value2[df2$id == df1$id[i] & df2$month == df1$month[i]], month = df1$month[i])
    # añadir la nueva fila a df3
    df3 <- rbind(df3, new_row)
    }
    }

    imprimir el dataframe combinado solo con los id y meses coincidentes

    df3


    Esto devolverá el siguiente dataframe: ```{r} id value1 value2 month 1 1 20 30 2 2 2 10 25 3

    Como era de esperar, los ids 3 y 5 no están presentes en df3 porque no tenían meses coincidentes en df2.

Comments are closed.