[R-es] Insertar filas en un data frame
José Antonio Palazón Ferrando
palazon en um.es
Mie Oct 28 12:01:33 CET 2009
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
Más información sobre la lista de distribución R-help-es