[R-es] Ayuda para hacer una lista

José Luis Pedro Méndez jo@e|u|@pedromendez @end|ng |rom c|enc|@@@un@m@mx
Vie Jun 28 20:49:38 CEST 2024


Buenos días,

No entiendo mucho del código que mencionas para la parte (3), tampoco
comprendo las ideas de número de condiciones *y *y número de réplicas *x*.
Sin embargo leyendo el propósito de *calcular el coeficiente de variación
por lista*, *ejemplo: **tres condiciones == tres listas == 3 CV == 3,
*considero
que  la función *group_by* podría ayudarte a realizar el cálculo del
coeficiente de variación por grupo, en este caso el grupo será la
condición, sin embargo veo que cada condición será una columna o varias
dependiendo de las réplicas -esto no sé si sea lo correcto-, si cada
condición sólo tiene una columna que lo represente debería ser algo así:

data.frame %>%
pivot_longer(
   names_to = 'condition',
   values_to = 'whatever') %>%
group_by(condition) %>%
   summarise(CV = sd(whatever,na.rm = TRUE) / mean(whatever, na.rm = TRUE) )
ungroup

La función *pivot_longer* permite que los valores que tienes en columnas
pasen a ser filas, ya con este acomodo la función *group_by* puede actuar
sin tanto problema, puedes hacer lo mismo para crear las listas que
necesites. En este caso la condición sólo tiene una columna, si una
condición tiene asociadas más columnas sólo debes tener cuidado para
agruparlo cuidadosamente, quizá creando una etiqueta que te englobe todas
las réplicas de una misma condición puedas usar el group_by(condition) que
te expongo.

Ojalá esto te ayude,
José Luis






El vie, 28 jun 2024 a las 7:57, Fer Arce via R-help-es (<
r-help-es using r-project.org>) escribió:

> Hola, que tal?
> Sin saber nada mas de los datos, por lo que dices, mi aprioximacion
> seria usar la funcion split, e.g.:
>
> splittedData <- split(myData, "variablegrupo/condicion")
>
> Esto te crearia una lista con tantos objectos como condiciones tengas.
>
> Saludos
>
>
> On 6/27/24 10:15, Leticia G Leon wrote:
> > Muchas fracias por la rapida contastacion Javier.
> >
> > Si, ya me he dado cuenta que a veces es mas limpiar y formatear que
> > calcular.
> >
> > Lo que yo necesito hacer no es crear un data.frame, es crear una lista
> por
> > cada grupo/condicion de muestras. Y queria hacerlo en un for loop, para
> que
> > no tuviese que indicar cuantas listas necesito si no que cogiese esa
> > informacion del usuario (y)
> >
> > Creo que no me explique muy bien, lo siento.
> >
> > Gracias
> >
> > Lety
> >
> >
> >
> > El mié, 26 jun 2024 a las 17:40, Javier Marcuzzi (<
> > javier.ruben.marcuzzi using gmail.com>) escribió:
> >
> >> Hola Leticia
> >>
> >> Acomodar datos para analizar suele llevar más trabajo que el análisis.
> >>
> >> Yo prefiero en un data.frame colocar todos los datos, porque siempre es
> >> más fácil filtrar que agregar. Cuándo tengo el data.frame con todo,
> realizo
> >> un plot (datos), y muchas veces en la gráfica veo cosas que me llaman la
> >> atención, de esta forma busco algo de antemano no sospechaba.
> >>
> >> No es necesario que conozcas el número de réplica, pueden armar de tal
> >> forma que cada réplica es una fila que agregas al data.frame. Pero son
> >> formas de trabajar, seguramente hay personas más inteligentes que yo.
> >>
> >> Javier Rubén Marcuzzi
> >>
> >>> El 26 jun 2024, a las 11:50 a. m., Leticia G Leon <
> gl.leticia using gmail.com>
> >> escribió:
> >>>
> >>> Hola
> >>> Soy Leticia, quería hacer una consulta al grupo a ver si me podéis
> >> ayudar.
> >>>
> >>> Tengo unos datos de proteínas, el data frame es: 5 columnas iniciales
> que
> >>> tienen información sobre las proteínas y después las columnas con las
> >>> intensidades, de las cuales no se cuantas condiciones tienen ni cuántas
> >>> réplicas por condición.
> >>>
> >>> Estoy intentando hacer un cálculo del coeficiente de variación por
> grupo
> >> y
> >>> representarlo en con boxplots.
> >>> Para poder hacer este plot, la mejor opción que he encontrado es crear
> >> una
> >>> lista por grupo y calcular el coeficiente de variación por lista,
> >> ejemplo:
> >>> tres condiciones == tres listas == 3 CV == 3 box in the plot.
> >>> Mi problema y donde necesito ayuda es que no consigo hacer un
> >>> código general para poder hacer las listas de forma automática, y esta
> >>> parte es el cuello de botella que siempre necesita que sea hardcoded
> (en
> >>> negrita) abajo.
> >>>
> >>> He puesto los pasos que tengo,
> >>> 1) pedir numero de replicas y condiciones
> >>> 2) renombrar las intensidades en base a lo anterior
> >>> 3) hacer las listas  ************ (AYUDA)
> >>>
> >>>
> >>> El codigo que tengo hasta ahora es:
> >>> ######### 1
> >>> ## Esta parte para introducir el numero de replicas y condiciones, que
> >>> varia segun el experimento
> >>> x = readline("Enter number of replicates: ")
> >>> print(paste("Number of replicates:", x ))
> >>>
> >>> y = readline("How many conditions? ")
> >>> print(paste("You have ", y , "conditions")
> >>>
> >>> ###########################
> >>> Esta parte para renombrar las intensidades usando x e y
> >>> ###### 2
> >>>
> >>> for (i in 1:y){
> >>>   varnames[i] <- c(rep(paste0("gp_", i), y))
> >>> }
> >>> varnames
> >>>
> >>> Group <- factor(varnames)
> >>>
> >>> nu.Norm <- select_if(Norm, is.numeric)
> >>>
> >>> #this part will change the columns names, do we want that?
> >>> names(nu.Norm) <- paste0(rep(varnames, each=x), "_", 1:x)
> >>> nu.Norm
> >>>
> >>> ##############################
> >>> Crear listas para el boxplot
> >>> ###### 3
> >>>
> >>> *listgp <- list(Norm[,6:(as.numeric(x)+5)],
> >>> Norm[,(as.numeric(x)+5):(as.numeric(x)*2+5)],
> >>> Norm[,(as.numeric(x)*2+5):(as.numeric(x)*3+5)])*
> >>>
> >>> OR
> >>>
> >>> f
> >>>
> >>>
> >>>
> >>>
> >>> *or (c in colnames(nu.Norm)){  dat1 <- nu.Norm %>% select(
> >>> contains("gp_1_"))  dat2 <- nu.Norm %>% select( contains("gp_2_"))
> dat3
> >> <-
> >>> nu.Norm %>% select( contains("gp_3_"))}list.gp <http://list.gp> <-
> >>> list(dat1, dat2, dat3)*
> >>>
> >>> cv.df <- lapply(list.gp, function(x){(apply(x,1,sd)/rowMeans(x))*100})
> >>> cvdf <-as.data.frame(do.call("cbind", cv.df))
> >>> colnames(cvdf)<-c(varnames)
> >>>
> >>> ###### crear la figura
> >>>
> >>> palette<-rep(c(randomColor(y, luminosity="random")), times=c(1,1,1))
> >>>
> >>> cvdf_melt<-reshape2::melt(cvdf)
> >>>
> >>> g5 <-ggplot( cvdf_melt, aes(x=variable,
> >>> y=value))+geom_boxplot(color="black",fill=palette, alpha=0.8)+##,
> >>> fill="Experiment"
> >>>   scale_y_continuous(limits=c(0,100), breaks=seq(0,100, by=10))+
> >>>   theme_bw()+
> >>>   theme(panel.grid.major = element_line(colour = "gray85"),
> >>>         panel.grid.minor = element_line(colour = "gray85"),
> >>>         axis.text.x = element_text(color = "black", size = 12,angle=45,
> >>> hjust=1,vjust=1),
> >>>         axis.text.y= element_text(color = "black", size = 12,angle=0,
> >>> hjust=0.5,vjust=0.5),
> >>>         axis.title.x=element_text(color = "black", size = 15,angle=0,
> >>> hjust=0.5,vjust=0.5),
> >>>         axis.title.y=element_text(color = "black", size = 15,angle=90,
> >>> hjust=0.5,vjust=0.5),
> >>>         axis.ticks.length = unit(5, "pt"),
> >>>         axis.ticks = element_line(size = 1),
> >>>         legend.position="none",
> >>>         title =element_text(size=12))+
> >>>   labs(x="", y = "CV(%)", title="Coefficient of variation")
> >>> g5
> >>>
> >>>
> >>>
> >>> GRACIAS!
> >>>
> >>>        [[alternative HTML version deleted]]
> >>>
> >>> _______________________________________________
> >>> R-help-es mailing list
> >>> R-help-es using r-project.org
> >>> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>
> >>
> >
> >       [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es