Cómo reemplazar condicionalmente valores en el marco de datos r usando la declaración si/entonces

Resuelto Saul Feliz asked hace 54 años • 2 respuestas

Me gustaría aprender cómo reemplazar condicionalmente valores en el marco de datos de R usando declaraciones si/entonces. Supongamos que tengo un marco de datos como este:

df <- data.frame(
customer_id = c(568468,568468,568468,485342,847295,847295),
customer = c('paramount','paramount','paramount','miramax','pixar','pixar'));

Me gustaría hacer algo como "si el cliente en ('paramount','pixar') establece customer_id 99. De lo contrario, no haga nada". Estoy usando este código, pero no funciona:

if(df$customer %in% c('paramount','pixar')){
df$customer_id == 99
}else{
df$customer_id == df$customer_id
}

Recibo un mensaje de advertencia que indica que la condición tiene una longitud > 1 y solo se utilizará el primer elemento. Y los valores no se reemplazan.

También me gustaría saber cómo hacer esto usando operadores lógicos para realizar algo como "si customer_id >= 500000, reemplace cliente con 'fox'. De lo contrario, no haga nada.

Es muy fácil de hacer en SQL, pero parece que no puedo entenderlo en R.

¿Mi sensación es que me falta un corchete en alguna parte?

¿Cómo reemplazo condicionalmente valores en el marco de datos de R usando declaraciones si/entonces?

Saul Feliz avatar Jan 01 '70 08:01 Saul Feliz
Aceptado

Puedes usar ifelse, así:

df$customer_id <- ifelse(df$customer %in% c('paramount', 'pixar'), 99, df$customer_id)

La sintaxis es simple:

ifelse(condition, result if TRUE, result if FALSE)

Está vectorizado, por lo que puede usarlo en una columna de marco de datos.

LAP avatar Jan 15 '2018 10:01 LAP

Está utilizando == en lugar de = (Operador de asignación) en el bloque if. Y no creo que sea necesario bloquear else en tu ejemplo ya que no vas a cambiar los valores.

 if(df$customer %in% c('paramount','pixar')){
  df$customer_id = 99
 }

El código anterior hará el trabajo por usted

Sociopath avatar Jan 15 '2018 10:01 Sociopath