Hola, no estoy seguro de si es esto lo que te hace falta. ¿conoces la funcion
"coalesce"?
coalesce function - RDocumentation
|
|
| |
coalesce function - RDocumentation
<p>Given a set of vectors, <code>coalesce()</code> finds the
first non-missing value at each position. This is i...
|
|
|
How to implement coalesce efficiently in R
|
|
|
| | |
|
|
|
| |
How to implement coalesce efficiently in R
BackgroundSeveral SQL languages (I mostly use postgreSQL) have a function called
coalesce which returns the fi...
|
|
|
En lunes, 14 de agosto de 2023, 16:38:04 CEST, Griera-yandex <griera en
yandex.com> escribió:
Hola:
Aplicando tu solución al problema original, seria:
> V1 <- c (47, 71, 41, 23, 83, 152, 82, 8, 160, 18)
> V2a <- c (NA, 36, 15, 5, 56, 18, NA, 5, NA, 5)
> V2b <- c (37, NA, 15, NA, NA, NA, 90, NA, 161, NA)
> ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))"
# Sin ORD:
> V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) -
V1)/V1)*100
> V3
[1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895
[7] 9.756098 -37.500000 0.625000 -72.222222
# Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))" por ORD:
> V3 <- eval(parse(text = paste0 ("((", ORD, "-
V1)/V1)*100")))
> V3
[1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895
[7] 9.756098 -37.500000 0.625000 -72.222222
# Sin ORD:
> V4 <- ifelse (! is.na ((((ifelse (is.na (V2a) & ! is.na (V2b),
V2b, V2a))-V1)/V1)*100), ifelse ((((ifelse (is.na (V2a) & ! is.na (V2b),
V2b, V2a))-V1)/V1)*100 > 0, '1', '0'), NA)
> V4
[1] "0" "0" "0" "0" "0"
"0" "1" "0" "1" "0"
# Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))" por ORD:
> V4 <- eval(parse(text = paste0 ("ifelse (! is.na (((", ORD,
"-V1)/V1)*100), ifelse (((", ORD, "-V1)/V1)*100 > 0,
'1', '0'), NA)")))
> V4
[1] "0" "0" "0" "0" "0"
"0" "1" "0" "1" "0"
Mucas gracias y saludos.
On Mon, 14 Aug 2023 10:14:06 +0200
Proyecto R-UCA <r-uca en uca.es> wrote:
> Buenas,
>
> ¿Qué tal esto?
>
> > V1 <- 1
> > V2a <- 20
> > V2b <- 200
> > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))"
> > V3 <- "((ORD - V1)/V1)*100"
> > V33 <- sub('ORD', ORD, V3)
> > V33
> [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) -
V1)/V1)*100"
> > eval(parse(text = V33))
> [1] 1900
>
> Un saludo
>
> El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió:
> > Gracias, Isidro, por la ayuda:
> >
> > On Fri, 11 Aug 2023 09:16:34 +0000
> > Isidro Hidalgo Arellano <ihidalgo en jccm.es> wrote:
> >
> > > A ver... con que xfunc() esté preparada para tomar un parámetro
de tipo "carácter" y evaluarlo, claro que se puede hacer...
> > > Si el problema lo tienes en evaluar la expresión, la función
"eval()" te lo hace.
> > > Si no te he entendido bien, explícate más ?
> >
> > Simplemente quería que en la orden:
> >
> > V3 <- ((ORD - V1)/V1)*100
> >
> > ORD lo reconocieses (y lo substituyese), por ejemplo, como
"(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
> > V2a))".
> >
> > Con eval() no parece que funcione:
> >
> > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))"
> > > V3 <- ((eval (ORD) - V1)/V1)*100
> > Error in eval(ORD) - V1 : non-numeric argument to binary operator
> >
> > Alguna sugerencia?
> >
> > Gracias y saludos.
> >
> >
> > > Saludos
> > > Isidro
> > >
> > >
> > > -----Mensaje original-----
> > > De: R-help-es <r-help-es-bounces en r-project.org> En
nombre de Griera
> > > Enviado el: jueves, 10 de agosto de 2023 19:36
> > > Para: r-help-es en r-project.org
> > > Asunto: [R-es] Expresión en un objeto
> > >
> > > Hola a todos:
> > >
> > > Se me ha planteado un problema que no está ligado a ningún
problema concreto. Es más teórico.
> > >
> > > Supongamos que tenemos tres variables:
> > >
> > > V1 <- c (47, 71, 41, 23, 83, 152, 82, 8, 160, 18)
> > > V2a <- c (NA, 36, 15, 5, 56, 18, NA, 5, NA, 5)
> > > V2b <- c (37, NA, 15, NA, NA, NA, 90, NA, 161, NA)
> > >
> > > Supongamos que tengo la expresión (que no puedo asignarlo a
ninguna variable):
> > >
> > > (ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))
> > >
> > > Supongamos que tengo que utilizar esta expresión dos o más veces
y no puedo utilizar ni un xapply () ni un bucle. Por ejemplo:
> > >
> > > V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))
- V1)/V1)*100
> > > V4 <- ifelse (! is.na ((((ifelse (is.na (V2a) & ! is.na
(V2b),
> > > V2b, V2a))-V1)/V1)*100), ifelse ((((ifelse (is.na (V2a) & !
is.na (V2b), V2b, V2a))-V1)/V1)*100 > 0, "1", "0"), NA)
> > >
> > > Hay alguna forma de almacenar la expresión "(ifelse (is.na
(V2a) & !
> > > is.na (V2b), V2b, V2a))" en un objeto y utilizar el nombre
del objeto en las ordenes (por ejemplo, con una hipotética función xfunc
> > > ()). Por
> > > ejemplo:
> > >
> > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))"
> > > V3 <- ((xfunc (ORD) - V1)/V1)*100
> > > V4 <- ifelse (! is.na (((xfunc (ORD)-V1)/V1)*100), ifelse
> > > (((xfunc (ORD)-V1)/V1)*100 > 0, "1", "0"),
NA)
> > >
> > >
> > > El ejemnplo és absurdo, pero solo lo presento como un hipotético
ejercicio.
> > >
> > > Muchas gracias por la ayuda.
> > >
> > > _______________________________________________
> > > R-help-es mailing list
> > > R-help-es en r-project.org
> > >
https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$
> > >
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es en r-project.org
> >
https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$
> >
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]