es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

reemplazar un valor determinado dentro de una columna con el siguiente número diferente en una fila en R

Tengo un conjunto de datos que en última instancia tendrá alrededor de ~30,000 observaciones. He formateado una variable de tal manera que los valores numéricos del 1 al 4 son de interés, mientras que el valor 5 es un marcador de posición y no pudo ser recopilado por nuestro instrumento de prueba por alguna razón o por falta de datos (no me preocupa por qué o por la falta de información, etc).

Estoy buscando convertir cualquier observación de 5, o serie de observaciones de 5, en el siguiente número en las observaciones. Como se puede ver en el conjunto de datos de ejemplo a continuación, las primeras cuatro observaciones tienen el número 5 mientras que las siguientes cuatro observaciones son el número 4. En esta situación, me gustaría que las primeras 4 observaciones se cambien de 5 a 4.

Tenga en cuenta que después de la octava observación ocurre otra serie de 5, seguida de una serie de 3. En este caso, los 5 deben cambiarse por 3.

En el bloque de código a continuación, he proporcionado un ejemplo de cómo se ve actualmente el conjunto de datos, delimitado por la columna “Actual”. También he proporcionado una columna de la salida deseada, delimitada por el nombre de columna “Deseado”. La variable “obs” fue útil para crear solo para mostrar el número de fila de los cambios en los valores para este caso.

df <- data.frame(Actual = c(5,5,5,5,4,4,4,4,5,5,3,3,3,5,3,3,5,5,2,5,5,5,1),
                 Deseado = c(4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,1,1,1,1))

df$obs = seq(1, nrow(df), by = 1)
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para convertir cualquier observación de 5, o serie de observaciones de 5, en el siguiente número de las observaciones, podemos utilizar declaraciones condicionales en R. Un enfoque es recorrer el data frame y verificar si el valor actual es 5. Si lo es, entonces establecemos el valor como igual al valor anterior. Podemos lograr esto mediante el uso de la función ifelse en R.

    Aquí hay un ejemplo de código que producirá la salida deseada:

    for (i in 2:nrow(df)) {
      if (df[i, "Current"] == 5) {
        df[i, "Current"] <- df[i-1, "Current"]
      }
    }
    

    En este código, recorremos las filas del data frame comenzando desde la segunda fila. Verificamos si el valor actual es 5 utilizando la declaración if. Si lo es, utilizamos la función ifelse para establecer el valor como igual al valor anterior.

    Después de ejecutar este código, la columna df$Current debería modificarse para que los 5 se cambien al siguiente número en las observaciones.

    > df
       Current Desired obs
    1        4       4   1
    2        4       4   2
    3        4       4   3
    4        4       4   4
    5        4       4   5
    6        4       4   6
    7        4       4   7
    8        4       4   8
    9        3       3   9
    10       3       3  10
    11       3       3  11
    12       3       3  12
    13       3       3  13
    14       3       3  14
    15       3       3  15
    16       2       2  16
    17       2       2  17
    18       2       2  18
    19       1       1  19
    20       1       1  20
    21       1       1  21
    22       1       1  22
    

Comments are closed.