[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