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.
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
Como era de esperar, los ids 3 y 5 no están presentes en df3 porque no tenían meses coincidentes en df2.