Skip to content

[R-es] Consulta sobre la creación de una columna mediante una condición

4 messages · Oscar Benitez, Mauricio Monsalvo, Carlos Ortega +1 more

#
Hola

Tengo una consulta simple pero que me está costando resolver

#creo un data frame
node = c("TipoDTE","TipoDTE","Other")
value = c("33", "35", "")
j = data.frame(node, value)

en este punto el dataframe tiene dos campos "node" y "value" que R reconoce
como factores de la siguiente manera:
node:  Factor w/ 2 levels "Other","TipoDTE": 2 2 1
value:   Factor w/ 3 levels "","33", "35" : 2 3 1

Quiero crear un campo nuevo mediante una condición:

j$TipoDTE.0<-ifelse (j$node=="TipoDTE",j$value,"")

Y el resultado es:

node value TipoDTE.0
TipoDTE 33 2
TipoDTE 35 3
Other


Lo que veo que está haciendo es colocar los niveles del factor en lugar del
valor del factor....
Evidentemente estoy haciendo algo mal, pero no encuentro qué es...

Cualquier ayuda será apreciada.

Saludos
#
Hola.
Creo que me sucedió algo parecido no hace mucho y "La Lista" me respondió
algo así como: R por defecto trabaja con los labels de los factores.
Entonces, al copiar pega todos las etiquetas (asumo que lo que llamás
"niveles") de los factores y no el "valor". En mi caso, era más claro
porque los valores eran números x <- 10, 15, 20, 30 pero los había
entendido como "factores" y las etiquetas (niveles) los había asignado
automáticamente, asumiendo un orden secuencial del tipo 1:length(x), o sea:
1, 2, 3, 4 (la posición de cada valor en el vector).-
La forma de resolverlo fue usando as.character(x), de modo que no asigne
etiquetas a los valores. Luego de realizado el copiado condicional, puedes
volverlo factor usando as.factor(x).-
Funcionaría...
Abrazo.

El 12 de octubre de 2016, 12:09, Oscar Benitez <oscar.benitez1962 en gmail.com>
escribió:

  
    
#
Hola,

El error lo tienes al crear el data.frame incluyendo en "value" no valores
numéricos, sino strings que también se guardan como factores.

De esta forma funciona sin problemas:

#----------------------------
node value
1 TipoDTE    33
2 TipoDTE    35
3   Other    NA
node value TipoDTE.0
1 TipoDTE    33        33
2 TipoDTE    35        35
3   Other    NA
#----------------------------

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 12 de octubre de 2016, 17:09, Oscar Benitez <oscar.benitez1962 en gmail.com>
escribió:

  
    
#
Buenas noches, Oscar.

No entiendo muy bien que problema tines, pero intenta lo siguiente a
ver si produc lo que buscas:

R> #creo un data frame
R> node = c("TipoDTE","TipoDTE","Other")
R> value = c("33", "35", "")
R> j = data.frame(node, value)
R>
R> j
     node value
1 TipoDTE    33
2 TipoDTE    35
3   Other
R> with(j, ifelse(node == 'TipoDTE', value, ""))
[1] "2" "3" ""
R> j$TipoDTE.0 <- with(j, ifelse(node == 'TipoDTE', value, "")); j
     node value TipoDTE.0
1 TipoDTE    33         2
2 TipoDTE    35         3
3   Other
R> j$TipoDTE.0
[1] "2" "3" ""

Saludos,
Jorge.-


2016-10-12 10:09 GMT-05:00 Oscar Benitez <oscar.benitez1962 en gmail.com>: