¿Cómo establecer el nivel de una columna de factor en el marco de datos R a NA?

Un marco de datos puede contener columnas que pertenecen a diferentes clases. Una columna de tipo de factor es un conjunto de variables categóricas, cada una asignada a un nivel único. Los niveles nos dan idea de la comorbilidad de la variable de datos entre sí. Estos niveles se pueden modificar tanto cuantitativamente (aumento/disminución) como cualitativamente (modificación de valor) utilizando métodos Base en el Lenguaje de Programación R. 

Método 1: Usar el método de niveles()

El métodolevels() en el lenguaje de programación R da acceso al atributo de niveles de una variable. Todos los niveles de la variable se pueden asignar a un valor diferente, incluso a un valor faltante. Como resultado, el mapeo de los niveles cambia y los niveles pueden disminuir, dependiendo del número de asignaciones de niveles a NA. Todas las instancias del nivel asignado como eliminadas de la columna de variables de entrada del marco de datos, así como el factor original.  

Sintaxis: 

niveles(df$nombre-col)[niveles(df$nombre-col) == val ] <- NA

Ejemplo:

R

# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
  
# if value of column1 is b then replace
# by missing value
levels(data_frame$col1)[levels(data_frame$col1)=="b"]<-NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)

Producción

[1] "Original DataFrame"
  col1 col2 col3
1     a    8    a
2     c   10    b
3     c    9    c
4     a    8    d
5     b    8    e
6     b    8    f
7     a    5    g
8     c    9    h
9     b    8    i
10    c    9    j
11    c    8    k
12    c    8    l
13    a    6    m
14    b   10    n
15    c    6    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1     a    8    a
2     c   10    b
3     c    9    c
4     a    8    d
5  <NA>    8    e
6  <NA>    8    f
7     a    5    g
8     c    9    h
9  <NA>    8    i
10    c    9    j
11    c    8    k
12    c    8    l
13    a    6    m
14 <NA>   10    n
15    c    6    o
[1] "Levels of col1"
[1] "a" "c"

El operador %in% en lenguaje R se utiliza para comprobar la presencia de un valor en un objeto vectorial o de lista. Devuelve un valor lógico dependiendo de si el valor existe. 

Sintaxis:

valor %in% vec

Con el operador %in%, se pueden verificar varios valores y también se pueden asignar más de un nivel a NA al mismo tiempo. 

Ejemplo:

R

# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
vec <- c("a","b")
  
# if value of column1 is b then replace 
# by missing value
levels(data_frame$col1)[levels(data_frame$col1) %in% vec]<-NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)

Producción

[1] "Original DataFrame"
  col1 col2 col3
1     a    7    a
2     b    5    b
3     b    7    c
4     a    5    d
5     b    5    e
6     a   10    f
7     c    8    g
8     c    5    h
9     a    6    i
10    a    8    j
11    a    5    k
12    b   10    l
13    b    5    m
14    b    6    n
15    c    8    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1  <NA>    7    a
2  <NA>    5    b
3  <NA>    7    c
4  <NA>    5    d
5  <NA>    5    e
6  <NA>   10    f
7     c    8    g
8     c    5    h
9  <NA>    6    i
10 <NA>    8    j
11 <NA>    5    k
12 <NA>   10    l
13 <NA>    5    m
14 <NA>    6    n
15    c    8    o
[1] "Levels of col1"
[1] "c"

Método 2: Usar el método de indexación

El valor deseado se puede comparar con la columna del marco de datos usando un operador == y luego se pueden eliminar todas sus instancias del marco de datos. Sin embargo, este método es menos eficiente, ya que solo asigna las ocurrencias de la variable a NA en el marco de datos y en realidad no modifica la cantidad de niveles que ya existen. 

Sintaxis:

df$nombre-col[df$nombre-col == val] = NA

Ejemplo:

R

# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
  
# if value of column1 is b then replace 
# by missing value
data_frame$col1[data_frame$col1 == "b"] = NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)

Producción

[1] "Original DataFrame"
  col1 col2 col3
1     c    7    a
2     b    5    b
3     b    6    c
4     c    5    d
5     c    7    e
6     c   10    f
7     b    7    g
8     a    9    h
9     c    9    i
10    a    8    j
11    c    9    k
12    a   10    l
13    a    8    m
14    b   10    n
15    a    7    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1     c    7    a
2  <NA>    5    b
3  <NA>    6    c
4     c    5    d
5     c    7    e
6     c   10    f
7  <NA>    7    g
8     a    9    h
9     c    9    i
10    a    8    j
11    c    9    k
12    a   10    l
13    a    8    m
14 <NA>   10    n
15    a    7    o
[1] "Levels of col1"
[1] "a" "b" "c"

Publicación traducida automáticamente

Artículo escrito por mallikagupta90 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *