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