Hola, Por favor, necesito insertar una fila debajo de las filas que tengan DV distinto de cero, pero no me deja insertar hasta el final de la tabla. Esta es mi tabla y este es el código con el que estoy apurado. C ID TIME DV AMT RATE CMT SS II EVID GRUPO VISITA DOSIS VECES FORMA NAP EDAD SEXO ALTURA PESO 11 0 0 3 0 1 1 12 1 3 0 3 2 1 0 77 2 147 74 11 1.417 0.001 0 0 2 0 0 0 3 0 3 2 1 0.001 77 2 147 74 11 0 0 9.6 -2 2 1 24 4 2 2 9.6 1 2 0 77 2 147 74 11 2.5 8.69 0 0 2 0 0 0 2 2 9.6 1 2 2.2 77 2 147 74 11 0 0 9.6 -2 2 1 24 4 2 3 9.6 1 2 0 77 2 147 74 11 2.667 17.49 0 0 2 0 0 0 2 3 9.6 1 2 3.14 77 2 147 74 12 0 0 6 0 1 1 12 1 3 0 6 2 1 0 72 1 160 71 12 15.417 1.61 0 0 2 0 0 0 3 0 6 2 1 2.03 72 1 160 71 12 0 0 6 0 1 1 12 4 3 2 6 2 1 0 72 1 160 71 12 0.917 28.39 0 0 2 0 0 0 3 2 6 2 1 4.79 72 1 160 71 12 0 0 6 0 1 1 12 4 3 3 6 2 1 0 72 1 160 71 12 -8758.75 51.45 0 0 2 0 0 0 3 3 6 2 1 7.67 72 1 160 71 13 0 0 4.5 0 1 1 12 1 3 0 4.5 2 1 0 78 2 151 46 13 2.5 15.28 0 0 2 0 0 0 3 0 4.5 2 1 6.31 78 2 151 46 13 0 0 4.5 -2 2 1 24 4 1 2 4.5 1 2 0 78 2 151 46 13 3.083 2.24 0 0 2 0 0 0 1 2 4.5 1 2 0.53 78 2 151 46 #Leer el archivo de datos: Data <- read.table ("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) i <- 0 for(i in 2:length(Data$DV)){ if(Data$DV[i] != 0 & Data$TIME[i] != Data$TIME[i-1]){ Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) Data$DV[i] <- Data$NAP[i] Data$NAP[i] <- 2 Data$CMT[i] <- 3 } } #Escribir los valores de la columna NAP: Data$NAP <- ifelse(Data$NAP != 2,Data$NAP <- 1,Data$NAP <- 2) #Eliminar columnas con valores NA: Data <- Data[!is.na(Data[,1]),] Data #Eliminar las variables utilizadas: rm(i,Data) Gracias
me parece que tu problema se reduce a un par de paréntesis. Sustituye esta linea Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) por Data <- rbind(Data[1:i,],Data[i,],Data[(i+1):length(Data$DV),]) Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez@iberstat.es Tel : +34 663 03 69 09 Web: http://www.iberstat.es ____________________________________ El 28/10/2009, a las 8:59, <guivivi@alumni.uv.es> <guivivi@alumni.uv.es> escribió:> Hola, > > Por favor, necesito insertar una fila debajo de las filas que > tengan DV > distinto de cero, pero no me deja insertar hasta el final de la tabla. > Esta es mi tabla y este es el código con el que estoy apurado. > > C ID TIME DV AMT RATE CMT SS II EVID GRUPO VISITA DOSIS VECES FORMA > NAP > EDAD SEXO ALTURA PESO > 11 0 0 3 0 1 1 12 1 3 0 3 2 1 0 77 2 147 74 > 11 1.417 0.001 0 0 2 0 0 0 3 0 3 2 1 0.001 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 2 9.6 1 2 0 77 2 147 74 > 11 2.5 8.69 0 0 2 0 0 0 2 2 9.6 1 2 2.2 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 3 9.6 1 2 0 77 2 147 74 > 11 2.667 17.49 0 0 2 0 0 0 2 3 9.6 1 2 3.14 77 2 147 74 > 12 0 0 6 0 1 1 12 1 3 0 6 2 1 0 72 1 160 71 > 12 15.417 1.61 0 0 2 0 0 0 3 0 6 2 1 2.03 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 2 6 2 1 0 72 1 160 71 > 12 0.917 28.39 0 0 2 0 0 0 3 2 6 2 1 4.79 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 3 6 2 1 0 72 1 160 71 > 12 -8758.75 51.45 0 0 2 0 0 0 3 3 6 2 1 7.67 72 1 160 71 > 13 0 0 4.5 0 1 1 12 1 3 0 4.5 2 1 0 78 2 151 46 > 13 2.5 15.28 0 0 2 0 0 0 3 0 4.5 2 1 6.31 78 2 151 46 > 13 0 0 4.5 -2 2 1 24 4 1 2 4.5 1 2 0 78 2 151 46 > 13 3.083 2.24 0 0 2 0 0 0 1 2 4.5 1 2 0.53 78 2 151 46 > > #Leer el archivo de datos: > Data <- read.table > ("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) > > i <- 0 > for(i in 2:length(Data$DV)){ > if(Data$DV[i] != 0 & Data$TIME[i] != Data$TIME[i-1]){ > Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) > Data$DV[i] <- Data$NAP[i] > Data$NAP[i] <- 2 > Data$CMT[i] <- 3 > } > } > #Escribir los valores de la columna NAP: > Data$NAP <- ifelse(Data$NAP != 2,Data$NAP <- 1,Data$NAP <- 2) > #Eliminar columnas con valores NA: > Data <- Data[!is.na(Data[,1]),] > Data > #Eliminar las variables utilizadas: > rm(i,Data) > > Gracias > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
me parece que tu problema se reduce a un par de paréntesis. Sustituye esta linea Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) por Data <- rbind(Data[1:i,],Data[i,],Data[(i+1):length(Data$DV),]) Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez en iberstat.es Tel : +34 663 03 69 09 Web: http://www.iberstat.es ____________________________________ El 28/10/2009, a las 8:59, <guivivi en alumni.uv.es> <guivivi en alumni.uv.es> escribió:> Hola, > > Por favor, necesito insertar una fila debajo de las filas que > tengan DV > distinto de cero, pero no me deja insertar hasta el final de la tabla. > Esta es mi tabla y este es el código con el que estoy apurado. > > C ID TIME DV AMT RATE CMT SS II EVID GRUPO VISITA DOSIS VECES FORMA > NAP > EDAD SEXO ALTURA PESO > 11 0 0 3 0 1 1 12 1 3 0 3 2 1 0 77 2 147 74 > 11 1.417 0.001 0 0 2 0 0 0 3 0 3 2 1 0.001 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 2 9.6 1 2 0 77 2 147 74 > 11 2.5 8.69 0 0 2 0 0 0 2 2 9.6 1 2 2.2 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 3 9.6 1 2 0 77 2 147 74 > 11 2.667 17.49 0 0 2 0 0 0 2 3 9.6 1 2 3.14 77 2 147 74 > 12 0 0 6 0 1 1 12 1 3 0 6 2 1 0 72 1 160 71 > 12 15.417 1.61 0 0 2 0 0 0 3 0 6 2 1 2.03 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 2 6 2 1 0 72 1 160 71 > 12 0.917 28.39 0 0 2 0 0 0 3 2 6 2 1 4.79 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 3 6 2 1 0 72 1 160 71 > 12 -8758.75 51.45 0 0 2 0 0 0 3 3 6 2 1 7.67 72 1 160 71 > 13 0 0 4.5 0 1 1 12 1 3 0 4.5 2 1 0 78 2 151 46 > 13 2.5 15.28 0 0 2 0 0 0 3 0 4.5 2 1 6.31 78 2 151 46 > 13 0 0 4.5 -2 2 1 24 4 1 2 4.5 1 2 0 78 2 151 46 > 13 3.083 2.24 0 0 2 0 0 0 1 2 4.5 1 2 0.53 78 2 151 46 > > #Leer el archivo de datos: > Data <- read.table > ("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) > > i <- 0 > for(i in 2:length(Data$DV)){ > if(Data$DV[i] != 0 & Data$TIME[i] != Data$TIME[i-1]){ > Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) > Data$DV[i] <- Data$NAP[i] > Data$NAP[i] <- 2 > Data$CMT[i] <- 3 > } > } > #Escribir los valores de la columna NAP: > Data$NAP <- ifelse(Data$NAP != 2,Data$NAP <- 1,Data$NAP <- 2) > #Eliminar columnas con valores NA: > Data <- Data[!is.na(Data[,1]),] > Data > #Eliminar las variables utilizadas: > rm(i,Data) > > Gracias > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
Gracias por tu respuesta, Olivier, pero sigue sin insertarme hasta el final de la tabla. ¿Será problema de length(Data$DV) en el bucle for?> me parece que tu problema se reduce a un par de paréntesis. > Sustituye esta linea > > Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) > > por > > Data <- rbind(Data[1:i,],Data[i,],Data[(i+1):length(Data$DV),]) > > Un saludo. Olivier > > -- > ____________________________________ > > Olivier G. Nuñez > Email: onunez en iberstat.es > Tel : +34 663 03 69 09 > Web: http://www.iberstat.es > > ____________________________________ > > > > > El 28/10/2009, a las 8:59, <guivivi en alumni.uv.es> > <guivivi en alumni.uv.es> escribió: > > > Hola, > > > > Por favor, necesito insertar una fila debajo de las filas que > > tengan DV > > distinto de cero, pero no me deja insertar hasta el final de latabla.> > Esta es mi tabla y este es el código con el que estoy apurado. > > > > C ID TIME DV AMT RATE CMT SS II EVID GRUPO VISITA DOSIS VECESFORMA> > NAP > > EDAD SEXO ALTURA PESO > > 11 0 0 3 0 1 1 12 1 3 0 3 2 1 0 77 2 147 74 > > 11 1.417 0.001 0 0 2 0 0 0 3 0 3 2 1 0.001 77 2 147 74 > > 11 0 0 9.6 -2 2 1 24 4 2 2 9.6 1 2 0 77 2 147 74 > > 11 2.5 8.69 0 0 2 0 0 0 2 2 9.6 1 2 2.2 77 2 147 74 > > 11 0 0 9.6 -2 2 1 24 4 2 3 9.6 1 2 0 77 2 147 74 > > 11 2.667 17.49 0 0 2 0 0 0 2 3 9.6 1 2 3.14 77 2 147 74 > > 12 0 0 6 0 1 1 12 1 3 0 6 2 1 0 72 1 160 71 > > 12 15.417 1.61 0 0 2 0 0 0 3 0 6 2 1 2.03 72 1 160 71 > > 12 0 0 6 0 1 1 12 4 3 2 6 2 1 0 72 1 160 71 > > 12 0.917 28.39 0 0 2 0 0 0 3 2 6 2 1 4.79 72 1 160 71 > > 12 0 0 6 0 1 1 12 4 3 3 6 2 1 0 72 1 160 71 > > 12 -8758.75 51.45 0 0 2 0 0 0 3 3 6 2 1 7.67 72 1 160 71 > > 13 0 0 4.5 0 1 1 12 1 3 0 4.5 2 1 0 78 2 151 46 > > 13 2.5 15.28 0 0 2 0 0 0 3 0 4.5 2 1 6.31 78 2 151 46 > > 13 0 0 4.5 -2 2 1 24 4 1 2 4.5 1 2 0 78 2 151 46 > > 13 3.083 2.24 0 0 2 0 0 0 1 2 4.5 1 2 0.53 78 2 151 46 > > > > #Leer el archivo de datos: > > Data <- read.table > > ("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) > > > > i <- 0 > > for(i in 2:length(Data$DV)){ > > if(Data$DV[i] != 0 & Data$TIME[i] != Data$TIME[i-1]){ > > Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) > > Data$DV[i] <- Data$NAP[i] > > Data$NAP[i] <- 2 > > Data$CMT[i] <- 3 > > } > > } > > #Escribir los valores de la columna NAP: > > Data$NAP <- ifelse(Data$NAP != 2,Data$NAP <- 1,Data$NAP <- 2) > > #Eliminar columnas con valores NA: > > Data <- Data[!is.na(Data[,1]),] > > Data > > #Eliminar las variables utilizadas: > > rm(i,Data) > > > > Gracias > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > >
José Antonio Palazón Ferrando
2009-Oct-28 11:01 UTC
[R-es] Insertar filas en un data frame
Hola: Se me ocurre un código más sencillo y, creo, más claro: #Por cierto, a mi, me sobra la primera C en el fichero de datos x<-read.table("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) #Seleccionamos las filas que se han de repetir y las que no (1:nrow(x))[TIME==0]->arepetir (1:nrow(x))[TIME!=0]->norepetir #creamos un nuevo data.frame con las filas repetidas y las otras x[sort(c(arepetir,arepetir,norepetir)),]->x.sel #Ponemos a cero los valores de las filas repetidas x.sel[paste(arepetir,"1",sep="."),]<-0 Espero que te sirva, supongo que se puede simplificar, pero creo que se aproxima razonablemente a la solución. El mié, 28-10-2009 a las 08:59 +0100, guivivi en alumni.uv.es escribió:> Hola, > > Por favor, necesito insertar una fila debajo de las filas que tengan DV > distinto de cero, pero no me deja insertar hasta el final de la tabla. > Esta es mi tabla y este es el código con el que estoy apurado. > > C ID TIME DV AMT RATE CMT SS II EVID GRUPO VISITA DOSIS VECES FORMA NAP > EDAD SEXO ALTURA PESO > 11 0 0 3 0 1 1 12 1 3 0 3 2 1 0 77 2 147 74 > 11 1.417 0.001 0 0 2 0 0 0 3 0 3 2 1 0.001 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 2 9.6 1 2 0 77 2 147 74 > 11 2.5 8.69 0 0 2 0 0 0 2 2 9.6 1 2 2.2 77 2 147 74 > 11 0 0 9.6 -2 2 1 24 4 2 3 9.6 1 2 0 77 2 147 74 > 11 2.667 17.49 0 0 2 0 0 0 2 3 9.6 1 2 3.14 77 2 147 74 > 12 0 0 6 0 1 1 12 1 3 0 6 2 1 0 72 1 160 71 > 12 15.417 1.61 0 0 2 0 0 0 3 0 6 2 1 2.03 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 2 6 2 1 0 72 1 160 71 > 12 0.917 28.39 0 0 2 0 0 0 3 2 6 2 1 4.79 72 1 160 71 > 12 0 0 6 0 1 1 12 4 3 3 6 2 1 0 72 1 160 71 > 12 -8758.75 51.45 0 0 2 0 0 0 3 3 6 2 1 7.67 72 1 160 71 > 13 0 0 4.5 0 1 1 12 1 3 0 4.5 2 1 0 78 2 151 46 > 13 2.5 15.28 0 0 2 0 0 0 3 0 4.5 2 1 6.31 78 2 151 46 > 13 0 0 4.5 -2 2 1 24 4 1 2 4.5 1 2 0 78 2 151 46 > 13 3.083 2.24 0 0 2 0 0 0 1 2 4.5 1 2 0.53 78 2 151 46 > > #Leer el archivo de datos: > Data <- read.table > ("C:/Guillermo/Aprendiendo/Tareas_MV/Horas/mydata.prn",header=TRUE) > > i <- 0 > for(i in 2:length(Data$DV)){ > if(Data$DV[i] != 0 & Data$TIME[i] != Data$TIME[i-1]){ > Data <- rbind(Data[1:i,],Data[i,],Data[i+1:length(Data$DV),]) > Data$DV[i] <- Data$NAP[i] > Data$NAP[i] <- 2 > Data$CMT[i] <- 3 > } > } > #Escribir los valores de la columna NAP: > Data$NAP <- ifelse(Data$NAP != 2,Data$NAP <- 1,Data$NAP <- 2) > #Eliminar columnas con valores NA: > Data <- Data[!is.na(Data[,1]),] > Data > #Eliminar las variables utilizadas: > rm(i,Data) > > Gracias > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es-- ____________________________________________________________ José Antonio Palazón Ferrando Profesor Titular. Departamento de Ecología e Hidrología. Facultad de Biología. Universidad de Murcia. Campus Universitario de Espinardo 30100 MURCIA-SPAIN Telf: +34 968 36 49 80 Fax : +34 968 36 39 63 Email: palazon en um.es