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.

¿Cómo crear una nueva columna resumiendo las columnas dadas que contienen ‘_sales’ de manera inteligente?

¿Cómo crear una nueva columna resumiendo las columnas dadas que contienen ‘_ventas’?

El código es el siguiente: el resultado de md %>% rowwise()%>% mutate(sub_total=across(contains("_sales"),sum)) no es lo que quiero. md$sub_total <- md$a_sales+md$b_sales+md$d_sales puede funcionar, pero es un poco complicado cuando hay más columnas dadas que las actuales.

ori_data <- data.frame(a_sales=c(1:5),
                 tsalses=c(1:5),
                 b_sales=c(7:11),
                 d_sales=c(1:5))

# esto no funciona
md %>% rowwise()%>% mutate(sub_total=across(contains("_sales"),sum))

# esto funciona, pero el código es un poco aburrido
md$sub_total <- md$a_sales+md$b_sales+md$d_sales
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva columna resumiendo columnas dadas que contienen ‘_sales’, se puede usar la función select() del paquete dplyr para seleccionar solo las columnas que contienen ‘_sales’ y luego usar las funciones rowwise() y sum() para sumar los valores de cada fila.

    Aquí está el código:

    library(dplyr)
    
    ori_data <- data.frame(a_sales=c(1:5),
                         tsalses=c(1:5),
                         b_sales=c(7:11),
                         d_sales=c(1:5))
    
    ori_data %>%
      rowwise() %>%
      mutate(sub_total = sum(select(., contains("_sales"))))
    

    Este código primero selecciona solo las columnas que contienen “_sales” usando select(., contains("_sales")). El . se refiere al marco de datos que se está enviando. Luego, usa rowwise() para realizar la función sum() para cada fila y almacena el resultado en una nueva columna llamada ‘sub_total’.

    Este enfoque es más eficiente y flexible que especificar manualmente las columnas a sumar, especialmente si el número de columnas es grande o dinámico.

Comments are closed.