Quiero eliminar los valores negativos de un dataframe y, a continuación, necesito calcular la media de cada fila por separado (media de valores positivos para cada fila)
Escribí esto para eliminar los valores negativos, pero no funcionó. Tengo un aviso como que :

Error en [<-.data.frame(*tmp*, i, j, valor = NULL) :
reemplazo tiene una longitud de cero

¿Cómo puedo solucionar este problema?

for (i in 1:1000) {
  for(j in 1:20){
     if (dframe[i,j]<=0) dframe[i,j]<-NULL
     j=j+1
  }
  i=i+1
}
  • Usted no puede tener valores NULL en los datos.marcos. Usted puede establecer a NA que es «una falta. Y, a continuación, puede utilizar rowSums(..., na.rm=T) ignorar los valores de NA.
  • gracias @MrFlick
InformationsquelleAutor cocomat | 2017-03-15

3 Comentarios

  1. 5

    Quiero añadir que no es necesario escribir un bucle for, sólo puede establecer:

    dframe[dframe < 0] <- NA

    Como dframe < 0 da la lógica de los índices de CIERTO en lo que dframe es menor que cero, y puede ser utilizado para el índice de dframe y reemplazar los valores VERDADEROS con NA.

    @MrFlick explicó el uso de NA en lugar de NULL, y cómo ignorar NA valores a la hora de calcular los medios de cada fila:

    rowMeans(dframe, na.rm=TRUE) 

    Editado para contestar la pregunta re: rowMeans la producción de Nan y cómo quitar:

    NA es «no disponible» y es una falta valor del indicador, mientras que NaN es «no es un número», el cual puede ser producido cuando el resultado de una operación aritmética no puede ser definido numéricamente, por ejemplo, 0/0. Yo no puedo ver su dframe valores, pero supongo que este es el resultado de la toma de la fila que se quiere decir cuando todos los valores de fila son de NA, mientras que el establecimiento de na.rm=TRUE. Ver la diferencia entre la media(c(NA, NA, NA, na.rm=TRUE) frente a la media(c(NA, NA, NA, na.rm=FALSE). Usted puede dejar de NaN o decidir cómo definir fila significa que cuando todos los valores de fila son negativos y se han sustituido por NA.

    A considerar que no sólo los valores NaN, puede subconjunto para no NaN mediante !is.nan, vea este ejemplo:

    mea <- c(2, 4, NaN, 6)
    mea
    # [1]   2   4 NaN   6
    !is.nan(mea) # not NaN, output logical
    # [1]  TRUE  TRUE FALSE  TRUE 
    mea <- mea[!is.nan(mea)]
    # [1] 2 4 6

    O se pueden sustituir los valores NaN con algún valor deseado mediante el establecimiento de mea[is.nan(mea)] <- ??

    • Creo que ambos significan rowMeans, no rowSums.
    • Ja! sí, gracias por la captura de ese, la edición de la respuesta
    • Muchas gracias. He escrito que: dframe[dframe < 0] <- NA > mea<-rowMeans(dframe, na.rm=TRUE), pero hay valores NaN en la mea. ¿Cómo puedo eliminarlos? ¿qué NaN decir? Es el mismo que NA?
    • NA es «no disponible» y es una falta valor del indicador, mientras que NaN es «no es un número», el cual puede ser producido cuando el resultado de una operación aritmética que no puede ser definido numéricamente, por ejemplo, 0/0. Yo no puedo ver su dframe valores, pero supongo que este es el resultado de la toma de la fila que se quiere decir cuando todos los valores son NA, mientras que el establecimiento de na.rm=TRUE. Ver la diferencia entre la media(c(NA, NA, NA, na.rm=TRUE) frente a la media(c(NA, NA, NA, na.rm=FALSE). Usted puede dejar de NaN o decidir cómo definir fila significa que cuando todos los valores de fila son negativos.
    • He editado mi respuesta sobre cómo lidiar con los Nan producido por rowMeans.
    • Muchas gracias

  2. 0

    Una manera más fácil de eliminar todas las filas con valores negativos de su dataframe sería:

    df <- df[df > 0]

    De esa manera cualquier fila con un valor negativo dejaría de ser en su dataframe.

  3. 0

    Es otra forma en que podría ayudar a alguien.

    Yo tenía el mismo problema de antes, sin Embargo decido usar dplyr para este problema.

        library("dplyr")
    
           data <- data %>%
                filter(column > 0)
    
     rowMeans(data, na.rm = TRUE)

    También me gustaría consejos para conseguir ambos (negativos y positivos) algunas veces será necesario después de más aclaraciones, tal es el por qué son negativos o de otros casos.

    resultPos2 <- result2 %>%# we get the df that is positive
        filter(periodBudget > 0)
    
    resultNeg2 <- result2 %>%# we get the df that is negative
        filter(periodBudget < 0)

    esto hace que sea más fácil para entregar a otras personas y de comprobación de errores si es necesario o razones que ¿por qué es negativo.

    práctico financiera de los casos o datos que ha sido manipulado por otros empleados

Dejar respuesta

Please enter your comment!
Please enter your name here