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.

Agregado con respecto a la condición.

Me enfrento al siguiente problema. Tengo un conjunto de datos que simplifico de la siguiente manera:

df <- tibble(ID_1=c("a","a","a","a","a","b","b","b","b"), ID_2=c("a","b","c","d","e","b","a","c","d"), other= c(1, "bu", 34, 3, 5, 6, "jud", 82, 9), exchange=c(1, 13, 34, 3, 5, 6, 8, 82, 9), goods=c("wood","wood","wood","wood","wood","steel","steel","steel","steel"))
df

Tenemos intercambios entre varios países que tienen diferentes ID. Quiero sumar todos los intercambios entre el país A y el país B. Entre el país A y el país C. etc. los bienes intercambiados.

Es decir, al final me gustaría tener:

ID_1 // ID_2 // Sum_exchangeAB
ID_1 // ID_3 // Sum_exchangeBC
....
ID_n // ID_n // Sum_exchangenn

¿Cómo puedo hacerlo en Dplyr? Intenté agrupar por (ID_1, ID_2) y luego agregar, o resumir.

Por ejemplo, intenté lo siguiente:

dataset2 %>% group_by(ID_1, ID_2, exchange) %>% summarise(dataset2, sum_of_exchange=sum(exchange))

Pero esto me da la suma de todos los intercambios (es decir, devuelve un solo valor). No la suma de intercambio entre dos países.

¡Gracias por su ayuda, muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la suma de intercambios entre dos países, se puede agrupar por la combinación de ID_1 e ID_2, y luego usar la función sum para calcular la suma de la columna de intercambio. Aquí hay un ejemplo:

    “`{r}
    library(dplyr)

    df %>%
    group_by(ID_1, ID_2) %>%
    summarise(Sum_exchangeAB = sum(exchange))


    Esto le dará una tabla donde cada fila representa la suma de intercambios entre dos países. Si desea obtener la suma de intercambios entre todos los pares de países, puede usar la función `combn` para generar todas las combinaciones de dos ID y luego aplicar el código anterior a cada combinación. Aquí hay un ejemplo: ```{r} combinations <- combn(unique(df$ID_1), 2) # generar todas las combinaciones de dos ID results <- list() # crear una lista vacía para almacenar los resultados for (i in 1:ncol(combinations)) { id1 <- combinations[1, i] id2 <- combinations[2, i] result <- df %>% filter((ID_1 == id1 & ID_2 == id2) | (ID_1 == id2 & ID_2 == id1)) %>% summarise(ID_1 = id1, ID_2 = id2, Sum_exchange = sum(exchange)) results[[i]] <- result # almacenar el resultado en la lista } do.call(rbind, results) # combinar todos los resultados en una sola tabla

    Esto le dará una tabla donde cada fila representa la suma de intercambios entre dos países, con todos los pares de países incluidos.

Comments are closed.