Tengo un muy básico R pregunta, pero estoy teniendo un momento difícil tratando de llegar a la respuesta correcta. Tengo un marco de datos que se parece a esto:

 ind<-rep(1:4,each=24)
 hour<-rep(seq(0,23,by=1),4)
 depth<-runif(length(ind),1,50)

 df<-data.frame(cbind(species,ind,hour,depth))
 df$depth<-as.numeric(df$depth)

Lo que me gustaría es seleccionar Y reemplazar todas las filas donde depth < 10 (por ejemplo) con cero, pero quiero mantener toda la información asociada a las filas y las dimensiones originales de la trama de datos.

He intente lo siguiente, pero esto no funciona.

df[df$depth<10]<-0

Alguna sugerencia?

  • Favor de abandonar la convención de usar data.frame( cbind( ... ) ). El cbind función crea una matriz en la cual se coacciona a todos sus valores numéricos a «carácter». Sólo uso data.frame(species,ind,hour,depth)). Por CIERTO, Este habría trabajado: df$depth[df$depth<10] <- 0
InformationsquelleAutor user1626688 | 2012-12-14

1 Comentario

  1. 82
    # reassign depth values under 10 to zero
    df$depth[df$depth<10] <- 0

    (Para las columnas que son los factores, sólo se pueden asignar los valores que son los niveles del factor. Si usted quería asignar un valor que no era actualmente un factor de nivel, usted necesita para crear el nivel adicional primera:

    levels(df$species) <- c(levels(df$species), "unknown") 
    df$species[df$depth<10]  <- "unknown" 
    • Sería posible adaptar esta solución a uno que puede ser utilizado en varias columnas a la vez? Traté de df [ -charcol ] [ df [ -charcol ] < 0] <- NA Pero que dio: Error: cannot allocate vector of size 1.8 Gb.
    • Basado en @42 de la solución y la eth páginas de ayuda Intentar DF[ ,c(39, 41:42)][DF[ ,c(39, 41:42)] < 0] <- 'NA' para reemplazar los valores que son inferiores a 0 en las columnas 39, 41 y 42 con la cadena de NA

Dejar respuesta

Please enter your comment!
Please enter your name here