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.

Cuando se “reduce” una lista, después de usar la función “coalesce”, ¿cómo se puede mutar una nueva variable?

Cuando se utiliza ‘reduce’, combina una lista a ‘final0′ (consulte la imagen a continuación),
¿cómo mutar la nueva variable ‘amount
from’ de ‘? Mi código muestra error. ¡Gracias!

imagen

library(tidyverse)
table_base <- data.frame(cat=c("a","b","c","d"))

table_a <- data.frame(cat=c("a","b"),
                      value=c(1,2))

table_b <- data.frame(cat=c("a","c","d"),
                      value=c(7,9,10))

final_0<- reduce(list(table_base,table_a,table_b),left_join,by='cat') %>%
  mutate(amount=coalesce(!!!select(.,starts_with('value'))))

# El siguiente código muestra error [no applicable method for 'fill' applied to an object of class "character"]

final_0 %>% 
  pivot_longer(-c('cat','amount')) %>% 
  mutate(value_from=if_else(amount==value,name,NULL)) %>% 
  group_by(cat) %>% 
  mutate(value_from=tidyr::fill(value_from,.direction = "downup"))
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mutar una nueva variable llamada ‘amount_from’ en el conjunto de datos ‘final_0’, puedes utilizar el siguiente código después de crear el conjunto de datos ‘final_0’:

    final_0 <- final_0 %>% 
      pivot_longer(cols = starts_with("value"), names_to = "source", values_to = "amount") %>% 
      mutate(amount_from = if_else(!is.na(amount), source, NULL)) %>% 
      select(-amount)
    

    Este código utiliza la función pivot_longer() para remodelar el conjunto de datos en un formato largo, con la columna ‘source’ indicando de qué tabla proviene el ‘valor’. Luego, la función mutate() crea una nueva columna ‘amount_from’ que contiene el nombre de la tabla (almacenado en ‘source’) de donde proviene el ‘valor’. Finalmente, se elimina la columna ‘amount’ utilizando la función select().

Comments are closed.