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]]
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 en 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 en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
Hola Leticia, podrías compartir una sección de tus datos para comprender el problema correctamente por favor ? Se me ocurre que con la librería data.table puede ser muy sencillo resolver el problema, pero necesito saber cómo están organizados tus datos. Saludos !! Eric. On Wed, 26 Jun 2024 16:50:39 +0200 Leticia G Leon <gl.leticia en gmail.com> wrote:> 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 en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es