[R-es] Loop for: mostrar el nombre de la variables

2015-06-30 Thread Griera
Buenos días:

Después de más de 20 años en SAS, ahora igual me toca trabajar en R. Y la 
transición es muy dura: la "lógica" de los dos lenguajes es, para mi, 
totalmente diferente. Disculpen si lo que pregunto es una obviedad, pero llevo 
todo el día con esto y no logro encontrar la respuesta adecuada con google.

Estoy intentado crear una función que realice una descriptiva simple de 
cualquier data frame. Simplificando es (en la función real definitiva la 
descriptiva es más completa):

***
# Data.frame para pruebas:
TBL <- data.frame(SE=sample(c("H","M"),10,TRUE),
  ED=(rnorm(10)+2.5)*20)
# Función DES:
DES = function(XDADES)
  {
attach(XDADES)
for (XVARNUM in XDADES)
  {  
  if(is.numeric(XVARNUM))
{
print (c("Var Num: ", mean(XVARNUM)))
}
  else if(is.factor(XVARNUM))
{
print (c("Var factor: "))
XOUT <- as.data.frame(table(XVARNUM))
print(XOUT <- transform(XOUT, cumFreq = cumsum(Freq), relative = 
prop.table(Freq)))
}
  else
{
print ("Var desc")
} 
  }
detach(XDADES)
  }

DES(XDADES=TBL)
***

Tengo dos problemas:

1. En:
  print (c("Var Num: ", mean(XVARNUM)))
   no consigo que imprima el nombre de la variable ED después de
   "Var Num:". En Internet parece que algunos sugieren utilizar:
   deparse(substitute(name(XVARNUM
   pero no me funciona.

2. El resultando de mostrar las frecuencias de la variable SE es:

[1] "Var factor: "
  XVARNUM Freq cumFreq relative
1   H5   5  0.5
2   M5  10  0.5

Como podría substituir XVARNUM por el nombre de la variable analizada (SE)?

Muchas gracias por la atención y la ayuda y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Convertir un factor HORA en una hora de R

2015-07-02 Thread Griera
Hola:

Tengo unos datos con varias fechas y horas como texto (son independientes: las 
horas no corresponden al día de la fecha). Seria algo como:

DATOS <- data.frame(FECHA=c("31/10/2014","23/10/2014", "31/10/2014"),
HORA=c("01:23", "12:43", "23:09"))

No tengo problema de convertir la fecha para poder realizar cálculos, ya que 
existe mucha información en Internet:

DATOS$FECHA = as.Date(DATOS$FECHA, format="%d/%m/%Y")

> str(DATOS)
'data.frame':   3 obs. of  2 variables:
 $ FECHA: Date, format: "2014-10-31" "2014-10-23" ...
 $ HORA : Factor w/ 3 levels "01:23","12:43",..: 1 2 3

Pero no encuentro una función similar (as.Time) para HH:MM. Como puedo
convertir el factor HORA en una hora de R para poder hacer cálculos (p.
ej. diferencia de horas)? (a ser posible, sin necesidad de instalar el
enésimo paquete).

Muchas gracias! Saludos

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Pasar un listado de variables como argumento de una función

2015-07-06 Thread Griera
Hola:

Quiero que una función realice una serie de cálculos pero eliminando las 
variables que no interesan (diferentes según e fichero a analizar). Intento 
pasar esta lista como argumento con un c("VAR1", "VAR2", etc), pero no lo 
consigo. Un ejemplo seria:

DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
EDAD=c(50, 60, 20, 18, 30),
GRP_S=c("B", "0", "B", "A", "B"))
DES = function(XDATOS, XDROP=F)
{
print(names(XDATOS))
DATOS_S <- subset(XDATOS, select = -c(XDROP))
}

Sin "" da el error:

> DES(DATOS, c(EDAD, GRP_S))
[1] "SE""EDAD"  "GRP_S"
Error in print(XDROP) : object 'EDAD' not found

Con "" da el error:

> DES(DATOS, c("EDAD", "GRP_S"))
[1] "SE""EDAD"  "GRP_S"
[1] "EDAD"  "GRP_S"
Error in -c(XDROP) : invalid argument to unary operator

Alguien me puede echar una mano. Estoy bien perdido. 

Gracias y saludos!

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar un listado de variables como argumento de una función

2015-07-07 Thread Griera
Hola:

Gracias de nuevo por la ayuda!

La solución, como no, funciona. Pero yo quería alguna cosa más flexible y 
universal que le pudiera pasar como parámetro diferentes opciones de incluir i 
excluir variables. Si estuviera fuera de la función seria:

=
DATOS <- data.frame(SE= c("M", "H", "M", "M", "H"),
EDAD  = c(50,  60,  20,  18,  30),
GRP_S = c("B", "0", "B", "A", "B"),
HTA   = c("N", "S", "N", "N", "N"))
# Excluir
DATOS_S <- subset(DATOS, select = -c(EDAD, GRP_S))
names(DATOS_S)
DATOS_S <- subset(DATOS, select = -c(SE, EDAD:GRP_S))
names(DATOS_S)
# Incluir
DATOS_S <- subset(DATOS, select = c(SE, GRP_S:HTA))
names(DATOS_S)
=

Pero cuando le paso a la función -c(EDAD, GRP_S)) o c(SE, GRP_S:HTA)), no 
funciona. Existe alguna solución que pueda incorporar esta flexibilidad?

Gracias Carlos y saludos. 


On Tue, 7 Jul 2015 00:26:54 +0200
Carlos Ortega  wrote:

> Hola,
> 
> Puedes hacerlo de esta otra forma:
> 
> #-
> DES = function(XDATOS, XDROP) {
>   #print(names(XDATOS))
>   #print(XDROP)
>   DATOS_S <- XDATOS[, setdiff(names(XDATOS), XDROP) ]
>   return(DATOS_S)
> }
> 
> DES(DATOS, c("EDAD", "GRP_S"))
> #-
> 
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> El 6 de julio de 2015, 21:59, Griera  escribió:
> 
> > Hola:
> >
> > Quiero que una función realice una serie de cálculos pero eliminando las
> > variables que no interesan (diferentes según e fichero a analizar). Intento
> > pasar esta lista como argumento con un c("VAR1", "VAR2", etc), pero no lo
> > consigo. Un ejemplo seria:
> >
> > DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
> > EDAD=c(50, 60, 20, 18, 30),
> > GRP_S=c("B", "0", "B", "A", "B"))
> > DES = function(XDATOS, XDROP=F)
> > {
> > print(names(XDATOS))
> > DATOS_S <- subset(XDATOS, select = -c(XDROP))
> > }
> >
> > Sin "" da el error:
> >
> > > DES(DATOS, c(EDAD, GRP_S))
> > [1] "SE""EDAD"  "GRP_S"
> > Error in print(XDROP) : object 'EDAD' not found
> >
> > Con "" da el error:
> >
> > > DES(DATOS, c("EDAD", "GRP_S"))
> > [1] "SE""EDAD"  "GRP_S"
> > [1] "EDAD"  "GRP_S"
> > Error in -c(XDROP) : invalid argument to unary operator
> >
> > Alguien me puede echar una mano. Estoy bien perdido.
> >
> > Gracias y saludos!
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
> 
> 
> -- 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Conservar el nombre de la variable entre varias funciones

2015-07-13 Thread Griera
Hola:

Con esto del R me da la impresión que avanzo un paso y retrocedo dos!

El caso es que tengo una "cascada de funciones", para realizar un análisis 
descriptivo "automático" en función del tipo de variable. Y en los resultados, 
en lugar de aparecer el nombre de la variable, aparece el nombre del argumento. 
Esto ocurre tanto si utilizo o no la función get().

Un ejemplo resumen reproducible:

=
# Con la función get()
A <- function (XVD, XVI, XDATOS) 
  {
attach(XDATOS)
B(XVD, XVI)
detach(XDATOS)
  }

B <- function (XVD, XVI)
  {
TBL = xtabs(~get(XVD) + get(XVI))
print(TBL)
print(summary(TBL))
  }

  
DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
EDAD=c(50, 60, 20, 18, 30),
GRP=c("B", "B", "A", "A", "B"))
A("GRP", "SE", DATOS)

La tabla que imprime és:

get(XVI)
get(XVD) H M
   A 0 2
   B 2 1



Sin la función get():
=
# Sin la función get()
A <- function (XVD, XVI, XDATOS) 
  {
attach(XDATOS)
B(XVD, XVI)
detach(XDATOS)
  }

B <- function (XVD, XVI)
  {
TBL = xtabs(~XVD + XVI)
print(TBL)
print(summary(TBL))
  }
A(GRP, SE, DATOS)

La tabla que imprime és:
> A(GRP, SE, DATOS)
   XVI
XVD H M
  A 0 2
  B 2 1
=


Alguien puede orienter-me como solucionarlo y que en los resultados aperzca el 
nombre de la variable en lugar del argumento de la función?

Muchas gracias y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados

2015-07-14 Thread Griera
Hola Carlos:

Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las 
funciones y las ordenes "source()" que las carga ) y un ejemplo para 
ejecutarlas para las opciones que tengo implementadas con la tabla de datos 
birthwt del paquete"MASS":
- Descriptiva de todas las variables de una tabla.
- Análisis univariado de todas las variables de una tabla cruzadas con una 
variable dependiente cualitativa.

=Inicio funciones 
##--
## DESUNI
##--
DESUNI = function(XDADES,
  XDROP=NULL,
  XVD=NULL,
  XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE
  )
  {
  options(digits = 3, OutDec=",", scipen=999)
  ## No existeix VD: descriptiva
  if(is.null(XVD))   # No existeix VD: descriptiva
{
  cat("\n*** Descriptiva (no existeix variable dependent)\n")
  DES(XDADES=XDADES, XDROP=XDROP,
  XCAMIF=XCAMIF)
}  
  ## Existeis VD: anàlisi univariat
  else   # Existeis VD: anàlisi univariat
{
  UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,
  XCAMIF=XCAMIF)
}
  }

##--
## DES: Descriptiva de todas las variables
##--
DES = function(XDADES,  XDROP=NULL,
   XCAMIF)
  {
ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES 
que són diferents de XDROP
attach(DADES_S, warn.conflicts = F)
XVARLLI=names(DADES_S)
for (XVARNOM in names(DADES_S))
  {
  if(is.numeric(get(XVARNOM)))
{
DES_QUANTI (XVARNOM)
}
  else if(is.factor(get(XVARNOM)))
{
DES_QUALI (XVARNOM)
}
  else
{
cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")
} 
  }
# Fi de la funció   
detach(DADES_S)
  }
##--
## DES_QUANTI: Descriptiva variables factor
##--
DES_QUANTI <-
  function(X) {
OP <- par(no.readonly = TRUE); # save old parameters
par(mfrow=c(1,3))
hist(get(X),main=c("Histograma de", X), xlab=X);rug(get(X))
boxplot(get(X), main=c("Diagrama de caixa de", X), 
ylab=X);rug(get(X),side=2)
qqnorm(get(X),  main=c("Diagrama Q-Q de", X));qqline(get(X))
cat("\n")
par(OP)
ESTA_1<-data.frame(Variable  = X,
   N_total   = length(get(X)),
   N_valids  = sum(!is.na(get(X))),
   N_desconeguts = sum(is.na(get(X)))
   )
ESTA_2<-data.frame(Variable  = X,
   N = sum(!is.na(get(X))),
   Mitjana   = if (mean(get(X) > 10)) {round(mean(get(X), 
na.rm = TRUE), 2)} else {round(mean(get(X), na.rm = TRUE), 3)},
   Err_tipic = if (sd  (get(X) > 10)) {round(sd  (get(X), 
na.rm = TRUE), 2)} else {round(sd  (get(X), na.rm = TRUE), 3)},
   Min   = min(get(X), na.rm = TRUE),
   Perc_25   = quantile(get(X),.25), 
   Mediana   = median(get(X), na.rm = TRUE),
   Perc_75   = quantile(get(X),.75), 
   Max   = max(get(X), na.rm = TRUE),
   Interval  = max(get(X), na.rm = TRUE) - min(get(X), 
na.rm = TRUE)
   )
cat("", "\n")
cat("Valors valids i desconeguts", "\n")
print(ESTA_1, row.names = FALSE)  
cat("", "\n")
cat("Estadistics", "\n")
print(ESTA_2, row.names = FALSE)   
cat("", "\n")
return(summary(get(X)))
  }
##--
## DES_QUALI: Descriptiva variables factor
##--
DES_QUALI <- function(X)
  {
  cat("Var factor: ",X,"\n")
  XOUT <- as.data.frame(table(get(X)))
  names(XOUT)[1] = X
  XOUT <- transform(XOUT, cumFreq = cumsum(Freq), Percentatge = 
prop.table(Freq))
  print(XOUT)
  print("-")
  }
##--
## UNI: Análisis univarido
##--
UNI = function(XDADES,  XDROP=NULL,
   XVD,
   XSPV=NULL, # Si és una anàlisi de SPV
   XCAMIF
   )
  {
ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ])
attach(DADES_S, warn.conflicts = F)
cat("\n Descriptiva de totes les variables selecc

[R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados

2015-07-15 Thread Griera
Hola:

Ayer me olvidé de señalar que el problema mayor que tengo es que al ejecutar la 
función UNI_VDQVIQ, en los resultados aparece el nombre del argumento que le 
paso a la función (get(XVDT) y XVARNOM  ), en lugar del nombre de la variable 
de la tabla de datos:

> library(MASS)
> data(birthwt, package="MASS")
> birthwt$low  <- factor(birthwt$low)
> birthwt$race <- factor(birthwt$race)
> DESUNI(XDADES=birthwt, XVD="low")

[borrado]

   Cell Contents
|-|
|   Count |
| Expected Values |
| Row Percent |
|-|

Total Observations in Table:  189 

 | XVARNOM 
   get(XVDT) |0  |1  | Row Total | 
-|---|---|---|
   0 |  130  |0  |  130  | 
 |89,42  |40,58  |   | 
 |   100,00% | 0,00% |68,78% | 
-|---|---|---|
   1 |0  |   59  |   59  | 
 |40,58  |18,42  |   | 
 | 0,00% |   100,00% |31,22% | 
-|---|---|---|
Column Total |  130  |   59  |  189  | 
-|---|---|---|



Es lo que pregunté inicialmente a la lista con el ejemplo reproducible:

A <- function (XVD, XVI, XDATOS) 
  {
attach(XDATOS)
B(XVD, XVI)
detach(XDATOS)
  }

B <- function (XVD, XVI)
  {
TBL = xtabs(~get(XVD) + get(XVI))
print(TBL)
print(summary(TBL))
  }

  
DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
EDAD=c(50, 60, 20, 18, 30),
GRP=c("B", "B", "A", "A", "B"))
A("GRP", "SE", DATOS)

La tabla que imprime és:

get(XVI)
get(XVD) H M
   A 0 2
   B 2 1

Gracias y saludos!


 Beginning of forwarded message  
14.07.2015, 22:49, "Griera" :

Hola Carlos:

Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las 
funciones y las ordenes "source()" que las carga ) y un ejemplo para 
ejecutarlas para las opciones que tengo implementadas con la tabla de datos 
birthwt del paquete"MASS":
- Descriptiva de todas las variables de una tabla.
- Análisis univariado de todas las variables de una tabla cruzadas con una 
variable dependiente cualitativa.

=Inicio funciones 
##--
## DESUNI
##--
DESUNI = function(XDADES,
  XDROP=NULL,
  XVD=NULL,
  XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE
  )
  {
  options(digits = 3, OutDec=",", scipen=999)
  ## No existeix VD: descriptiva
  if(is.null(XVD)) # No existeix VD: descriptiva
{
  cat("\n*** Descriptiva (no existeix variable dependent)\n")
  DES(XDADES=XDADES, XDROP=XDROP,
  XCAMIF=XCAMIF)
}
  ## Existeis VD: anàlisi univariat
  else # Existeis VD: anàlisi univariat
{
  UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,
  XCAMIF=XCAMIF)
}
  }

##--
## DES: Descriptiva de todas las variables
##--
DES = function(XDADES, XDROP=NULL,
   XCAMIF)
  {
ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES 
que són diferents de XDROP
attach(DADES_S, warn.conflicts = F)
XVARLLI=names(DADES_S)
for (XVARNOM in names(DADES_S))
  {
  if(is.numeric(get(XVARNOM)))
{
DES_QUANTI (XVARNOM)
}
  else if(is.factor(get(XVARNOM)))
{
DES_QUALI (XVARNOM)
}
  else
{
cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")
}
  }
# Fi de la funció
detach(DADES_S)
  }
##--
## DES_QUANTI: Descriptiva variables factor
##--
DES_QUANTI <-
  function(X) {
OP <- par(no.readonly = TRUE); # save old parameters
par(mfrow=c(1,3))
hist(get(X), main=c("Histograma de", X), xlab=X);rug(get(X))
boxplot(get(X), main=c("Diagrama de caixa de", X), 
ylab=X);rug(get(X),side=2)
qqnorm(get(X), main=c("Diagrama Q-Q de", X));qqline(get(X))
cat("\n")
par(OP)
ESTA_1<-data.frame(Variable = X,
   N_total = length(get(X)),
  

Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados

2015-07-15 Thread Griera
Hola Carlos:[Entre líneas] 15.07.2015, 00:18, "Carlos Ortega" :Hola,Gracias por el código. Lo he ejecutado y he visto los resultados.Salvo la parte de los test como te dije, todo lo demás creo que se puede hacer más automático.Probaré a hacer alguna prueba de lo que te comento utilizando el conjunto de MASS.Sobre la duda de los nombres, si le pasas el data.frame tal cual, te debiera de conservar los nombres.Si no es así, pásale como argumento adicional a las funciones los nombres de las columnas/variables... Había escrito un nuevo mail aclaratorio sin haber leído este. Olvida el último mail y pruebo estas dos cosas que dices. Muchas gracias y saludos   Saludos,Carlos. El 14 de julio de 2015, 22:49, Griera <gri...@yandex.com> escribió:Hola Carlos:  Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las funciones y las ordenes "source()" que las carga ) y un ejemplo para ejecutarlas para las opciones que tengo implementadas con la tabla de datos birthwt del paquete"MASS": - Descriptiva de todas las variables de una tabla. - Análisis univariado de todas las variables de una tabla cruzadas con una variable dependiente cualitativa.  =Inicio funciones  ##-- ## DESUNI ##-- DESUNI = function(XDADES,                   XDROP=NULL,                   XVD=NULL,                   XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE                   )   {   options(digits = 3, OutDec=",", scipen=999)   ## No existeix VD: descriptiva   if(is.null(XVD))   # No existeix VD: descriptiva     {       cat("\n*** Descriptiva (no existeix variable dependent)\n")       DES(XDADES=XDADES, XDROP=XDROP,           XCAMIF=XCAMIF)     }   ## Existeis VD: anàlisi univariat   else               # Existeis VD: anàlisi univariat     {       UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,           XCAMIF=XCAMIF)     }   }  ##-- ## DES: Descriptiva de todas las variables ##-- DES = function(XDADES,  XDROP=NULL,                XCAMIF)   {     ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES que són diferents de XDROP     attach(DADES_S, warn.conflicts = F)     XVARLLI=names(DADES_S)     for (XVARNOM in names(DADES_S))       {       if(is.numeric(get(XVARNOM)))         {         DES_QUANTI (XVARNOM)         }       else if(is.factor(get(XVARNOM)))         {         DES_QUALI (XVARNOM)         }       else         {         cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")         }       }     # Fi de la funció     detach(DADES_S)   } ##-- ## DES_QUANTI: Descriptiva variables factor ##-- DES_QUANTI <-   function(X) {     OP <- par(no.readonly = TRUE); # save old parameters     par(mfrow=c(1,3))     hist(get(X),    main=c("Histograma de", X), xlab=X);rug(get(X))     boxplot(get(X), main=c("Diagrama de caixa de", X), ylab=X);rug(get(X),side=2)     qqnorm(get(X),  main=c("Diagrama Q-Q de", X));qqline(get(X))     cat("\n")     par(OP)     ESTA_1<-data.frame(Variable      = X,                        N_total       = length(get(X)),                        N_valids      = sum(!is.na(get(X))),                        N_desconeguts = sum(is.na(get(X)))                        )     ESTA_2<-data.frame(Variable  = X,                        N         = sum(!is.na(get(X))),                        Mitjana   = if (mean(get(X) > 10)) {round(mean(get(X), na.rm = TRUE), 2)} else {round(mean(get(X), na.rm = TRUE), 3)},                        Err_tipic = if (sd  (get(X) > 10)) {round(sd  (get(X), na.rm = TRUE), 2)} else {round(sd  (get(X), na.rm = TRUE), 3)},                        Min       = min(get(X), na.rm = TRUE),                        Perc_25   = quantile(get(X),.25),                        Mediana   = median(get(X), na.rm = TRUE),                        Perc_75   = quantile(get(X),.75),                        Max       = max(get(X), na.rm = TRUE),                        Interval  = max(get(X), na.rm = TRUE) - min(get(X), na.rm = TRUE)                        )     cat("", "\n")     cat("Valors valids i desconeguts", "\n")     print(ESTA_1, row.names = FALSE)     cat("", "\n")     cat("Estadistics", "\n")     print(ESTA_2, row.names = FALSE)     cat("", "\n")     return(summary(

Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados: solucionado

2015-07-15 Thread Griera
Hola:

On Wed, 15 Jul 2015 00:18:32 +0200
Carlos Ortega  wrote:
[borro]
> Sobre la duda de los nombres, si le pasas el data.frame tal cual, te
> debiera de conservar los nombres.

Tienes razón. Ahora le paso el nombre del data.frame, y ya muestra el nombre de 
la variable analizada.

Muchas gracias por la sugerencia. 

Saludos!

> Si no es así, pásale como argumento adicional a las funciones los nombres
> de las columnas/variables...
> 
> Saludos,
> Carlos.
> 
> 
> El 14 de julio de 2015, 22:49, Griera  escribió:
> 
> > Hola Carlos:
> >
> > Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de
> > las funciones y las ordenes "source()" que las carga ) y un ejemplo para
> > ejecutarlas para las opciones que tengo implementadas con la tabla de datos
> > birthwt del paquete"MASS":
> > - Descriptiva de todas las variables de una tabla.
> > - Análisis univariado de todas las variables de una tabla cruzadas con una
> > variable dependiente cualitativa.
> >
> > =Inicio funciones 
> > ##--
> > ## DESUNI
> > ##--
> > DESUNI = function(XDADES,
> >   XDROP=NULL,
> >   XVD=NULL,
> >   XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el
> > valor TRUE
> >   )
> >   {
> >   options(digits = 3, OutDec=",", scipen=999)
> >   ## No existeix VD: descriptiva
> >   if(is.null(XVD))   # No existeix VD: descriptiva
> > {
> >   cat("\n*** Descriptiva (no existeix variable dependent)\n")
> >   DES(XDADES=XDADES, XDROP=XDROP,
> >   XCAMIF=XCAMIF)
> > }
> >   ## Existeis VD: anàlisi univariat
> >   else   # Existeis VD: anàlisi univariat
> > {
> >   UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,
> >   XCAMIF=XCAMIF)
> > }
> >   }
> >
> > ##--
> > ## DES: Descriptiva de todas las variables
> > ##--
> > DES = function(XDADES,  XDROP=NULL,
> >XCAMIF)
> >   {
> > ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[,
> > setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de
> > XDADES que són diferents de XDROP
> > attach(DADES_S, warn.conflicts = F)
> > XVARLLI=names(DADES_S)
> > for (XVARNOM in names(DADES_S))
> >   {
> >   if(is.numeric(get(XVARNOM)))
> > {
> > DES_QUANTI (XVARNOM)
> > }
> >   else if(is.factor(get(XVARNOM)))
> > {
> > DES_QUALI (XVARNOM)
> > }
> >   else
> > {
> > cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts",
> > "\n")
> > }
> >   }
> > # Fi de la funció
> > detach(DADES_S)
> >   }
> > ##--
> > ## DES_QUANTI: Descriptiva variables factor
> > ##--
> > DES_QUANTI <-
> >   function(X) {
> > OP <- par(no.readonly = TRUE); # save old parameters
> > par(mfrow=c(1,3))
> > hist(get(X),main=c("Histograma de", X), xlab=X);rug(get(X))
> > boxplot(get(X), main=c("Diagrama de caixa de", X),
> > ylab=X);rug(get(X),side=2)
> > qqnorm(get(X),  main=c("Diagrama Q-Q de", X));qqline(get(X))
> > cat("\n")
> > par(OP)
> > ESTA_1<-data.frame(Variable  = X,
> >N_total   = length(get(X)),
> >N_valids  = sum(!is.na(get(X))),
> >N_desconeguts = sum(is.na(get(X)))
> >)
> > ESTA_2<-data.frame(Variable  = X,
> >N = sum(!is.na(get(X))),
> >Mitjana   = if (mean(get(X) > 10))
> > {round(mean(get(X), na.rm = TRUE), 2)} else {round(mean(get(X), na.rm =
> > TRUE), 3)},
> >Err_tipic = if (sd  (get(X) > 10)) {round(sd
> > (get(X), na.rm = TRUE), 2)} else {round(sd  (get(X), na.rm = TRUE), 3)},
> >Min   = min(get(X), na.rm = TRUE),

Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados: solucion defmacro

2015-07-16 Thread Griera
Hola:

He probado otra solución: con defmacro del paquete gtools:

=
DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
ED=c(50, 60, 20, 18, 30),
GRP=c("B", "B", "A", "A", "B"))
library(gtools)
MRL <- defmacro(XDADES, XVD, XVI, expr = 
  {
RL <- glm(XVD ~ XVI, family=binomial, data=XDADES)
print(summary(RL))
  
  })
=

Si se ejecuta aparecen los nombres reales de las variables y no el nombre de 
los argumentos:

=
> MRL(XDADES=DATOS, XVD=SE, XVI=ED)  

Call:
glm(formula = SE ~ ED, family = binomial, data = DATOS)

Deviance Residuals: 
  12345  
 1,3511  -0,7869   0,6512   0,6159  -1,5435  

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)  2,671702,60538   1,0250,305
ED  -0,061420,06326  -0,9710,332
[borrado]
=

En cambio en forma de función en los resultados aparece el nombre de los 
argumentos:

=
FRL <- function(XVD, XVI)
  {
RL <- glm(XVD ~ XVI, family=binomial)
print(summary(RL))
  }
FRL(XVD=SE, XVI=ED)  

Call:
glm(formula = XVD ~ XVI, family = binomial)

Deviance Residuals: 
  12345  
 1,3511  -0,7869   0,6512   0,6159  -1,5435  

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)  2,671702,60538   1,0250,305
XVI -0,06142    0,06326  -0,9710,332
[borrado]
=

Saludos!


On Wed, 15 Jul 2015 20:26:46 +0200
Griera  wrote:

> Hola:
> 
> On Wed, 15 Jul 2015 00:18:32 +0200
> Carlos Ortega  wrote:
> [borro]
> > Sobre la duda de los nombres, si le pasas el data.frame tal cual, te
> > debiera de conservar los nombres.
> 
> Tienes razón. Ahora le paso el nombre del data.frame, y ya muestra el nombre 
> de la variable analizada.
> 
> Muchas gracias por la sugerencia. 
> 
> Saludos!
> 
> > Si no es así, pásale como argumento adicional a las funciones los nombres
> > de las columnas/variables...
> > 
> > Saludos,
> > Carlos.
> > 
> > 
> > El 14 de julio de 2015, 22:49, Griera  escribió:
> > 
> > > Hola Carlos:
> > >
> > > Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de
> > > las funciones y las ordenes "source()" que las carga ) y un ejemplo para
> > > ejecutarlas para las opciones que tengo implementadas con la tabla de 
> > > datos
> > > birthwt del paquete"MASS":
> > > - Descriptiva de todas las variables de una tabla.
> > > - Análisis univariado de todas las variables de una tabla cruzadas con una
> > > variable dependiente cualitativa.
> > >
> > > =Inicio funciones 
> > > ##--
> > > ## DESUNI
> > > ##--
> > > DESUNI = function(XDADES,
> > >   XDROP=NULL,
> > >   XVD=NULL,
> > >   XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el
> > > valor TRUE
> > >   )
> > >   {
> > >   options(digits = 3, OutDec=",", scipen=999)
> > >   ## No existeix VD: descriptiva
> > >   if(is.null(XVD))   # No existeix VD: descriptiva
> > > {
> > >   cat("\n*** Descriptiva (no existeix variable dependent)\n")
> > >   DES(XDADES=XDADES, XDROP=XDROP,
> > >   XCAMIF=XCAMIF)
> > > }
> > >   ## Existeis VD: anàlisi univariat
> > >   else   # Existeis VD: anàlisi univariat
> > > {
> > >   UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,
> > >   XCAMIF=XCAMIF)
> > > }
> > >   }
> > >
> > > ##--
> > > ## DES: Descriptiva de todas las variables
> > > ##--
> > > DES = function(XDADES,  XDROP=NULL,
> > >XCAMIF)
> > >   {
> > > ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[,
> > > setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de
> > > XDADES que són diferents de XDROP
> > > attach(DADES_S, warn.conflicts = F)
> > > XVARLLI=

[R-es] glm com etiquetas en las variables

2015-07-21 Thread Griera
Hola:

Si aún hay alguien que no está de vacaciones, igual me pueden ayudar.

Quiero ajustar unos modelos:

REG_LOG <- glm (low ~ X, family = "binomial", data = DATOS)
   
Ejemplo:
  library(MASS)
  data(birthwt, package="MASS")
  birthwt$low  <- factor(birthwt$low)
  birthwt$race <- factor(birthwt$smoke)
  REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
  summary (REG_LOG)

Se pueden colocar etiquetas en las variable de la fórmula de manera que en los 
resultados salgan las etiquetas y no el nombre de la variable? Seria una cosa 
como:

REG_LOG <- glm (low = "Bajo peso recién nacido" ~ smoke = "Consumo tabaco 
embarazo", family = "binomial", data = birthwt)

que, evidentemente no funciona.

Muchas gracias y saludos

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] glm com etiquetas en las variables: solucionado

2015-07-21 Thread Griera
Hola:

Dos soluciones:

On Tue, 21 Jul 2015 11:26:32 +0200
Carlos Ortega  wrote:
> Esta es una alternativa sólo válida para el modelo de ejemplo, pero te da
> una idea de cómo se podría hacer...
> 
> Se puede generalizar para que tengas un vector con las relaciones nombres
> de las variables y su descripción y al hacer la asignación (mySummary$call)
> las cambie programáticamente.
> 
> #---
> 
> mySummary <- summary (REG_LOG)
> mySummary$call <- c("glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo
> tabaco..', family = 'binomial', data = birthwt)")
> mySummary
> #---
>- El resultado de summary(), lo guardo en una variable.
>- El resultado de summary() es un objeto que tiene diferentes elementos.
>Lo que devuelve cada función, aparece en la ayuda de R bajo el epígrafe
>"Value". Mira lo que devuelve "summary.glm"..
>- Uno de los elementos que devuelve "summary.glm" es "call" que es la
>llamada, la fórmula del modelo.
>- Lo que hago es coger esa parte "mySummary$call" y modificarlo con el
>literal que yo quiero.
>- Una vez modificado, al ejecutar "mySummary" aparece la modificación,
>junto con el resto de valores que no he tocado.

On Tue, 21 Jul 2015 11:31:44 +0200
Jose Luis Cañadas Reche  wrote:
> Otra idea es utilizar el paquete memisc
> 
> library(MASS)
> data(birthwt, package="MASS")
> birthwt$low  <- factor(birthwt$low)
> birthwt$race <- factor(birthwt$smoke)
> REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
> summary (REG_LOG)
> 
> library(memisc)
> 
> mtable1 <- mtable(REG_LOG)
> 
> mtable1 <- relabel(mtable1,
>"(Intercept)" = "Constante",
>smoke = "Consumo tabaco embarazo"
> )
> mtable1
> 
> Calls:
> REG_LOG: glm(formula = low ~ smoke, family = "binomial", data = birthwt)
> 
> ==
> Constante-1.087***
>   (0.215)
> Consumo tabaco embarazo   0.704*
>   (0.320)
> --
> Aldrich-Nelson R-sq.0.025
> McFadden R-sq.  0.021
> Cox-Snell R-sq. 0.025
> Nagelkerke R-sq.0.036
> phi 1.000
> Likelihood-ratio4.867
> p   0.027
> Log-likelihood   -114.902
> Deviance  229.805
> AIC   233.805
> BIC   240.288
> N 189
> ==
> 
> # o un fichero separado por comas
> write.mtable(mtable1, file = "resumen.csv", colsep=",")


Las dos funcionan sin problema. La Jose Luis Cañadas es mucho más
sencilla, pero utiliza el enesimo paquete memisc y, si puedo, los evito: ¿que 
pasará si el que lo mantiene se jubila antes que yo?

Implemento por tanto la primera. Como el código va dentro de una función que 
solo realiza reg logísticas, no me importa que tenga que escribir un poca más 
de código una vez.

Quedaría así:
> library(MASS)
> data(birthwt, package="MASS")
> birthwt$low  <- factor(birthwt$low)
> birthwt$race <- factor(birthwt$smoke)
> REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
> mySummary <- summary (REG_LOG)
> mySummary$call <- c("glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo 
> tabaco..', family = 'binomial', data = birthwt)")
> mySummary

Call:
"glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo tabaco..', family = 
'binomial', data = birthwt)"

Deviance Residuals: 
Min   1Q   Median   3Q  Max  
-1,0197  -0,7623  -0,7623   1,3438   1,6599  

Coefficients:
Estimate Std. Error z valuePr(>|z|)
(Intercept)  -1,0871 0,2147  -5,062 0,00414 ***
smoke 0,7041 0,3196   2,203  0,0276 *  
---
[borrado]


Gracias y saludos.




> > El 21 de julio de 2015, 10:57, Griera  escribió:
> >
> >> Hola:
> >>
> >> Si aún hay alguien que no está de vacaciones, igual me pueden ayudar.
> >>
> >> Quiero ajustar unos modelos:
> >>
> >>  REG_LOG <- glm (low ~ X, family = "binomial", data = DATOS)
> >>
> >> Ejemplo:
> >>library(MASS)
> >>data(birthwt, package="MASS")
> >>birthwt$low  <- factor(birthwt$low)
> >> 

[R-es] Error sql en función

2015-07-27 Thread Griera
Hola:

No consigo que la función sqldf () funcione dentro de una función. Alguien 
puede echarme una mano. En resumen, el problema es que cuando lo ejecuto fuera 
de una función no tengo ningún problema:

==
> # install.packages("sqldf")
> library(MASS)
> library (sqldf)
> data(Aids2, package="MASS")
> options(digits=3)

> table (Aids2$state)
  NSW Other   QLD   VIC 
 1780   249   226   588 

> max (Aids2$age)
[1] 82

> # Sin función:
> DADES_SEL = sqldf ("select * from Aids2 where state in ('NSW', 'QLD') and age 
> < 40") 

> table (DADES_SEL$state)
  NSW Other   QLD   VIC 
 1102 0   128 0 

> max (DADES_SEL$age)
[1] 39
==

Pero dentro de una función no se como pasarle los argumentos para que funcione:

==
> SQL_PROVA = function (XDADES, XWHE)
+   {
+   XDADES_SQL = sqldf (paste ("select * from", XDADES, XWHE, sep = " "))
+   return(XDADES_SQL)
+   }
> DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: near "fromc": syntax error
==

Alguien puede ayudarme y decir que estoy haciendo mal? El problema debe estar 
en el "paste" ya que si coloco la orden original funciona:

==
> SQL_PROVA = function (XDADES, XWHE)
+   {
+   XDADES_SQL2 = sqldf ("select * from Aids2 where state in ('NSW', 'QLD') and 
age < 40") 
+   return(XDADES_SQL2)
+   }

> DADES_SEL2 = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")

> table (DADES_SEL2$state)
  NSW Other   QLD   VIC 
 1102 0   128 0 

> max (DADES_SEL2$age)
[1] 39
==
 
Muchas gracias y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Error sql en función: Solucionado

2015-07-27 Thread Griera
Gracias, Carlos!

Como siempre, funciona a la perfección lo que propones:


> library(MASS)
> library (sqldf)  # Per SQL
> data(Aids2, package="MASS")
> table (Aids2$state)
  NSW Other   QLD   VIC 
 1780   249   226   588 

> max (Aids2$age)
[1] 82

> SQL_PROVA = function (XDADES, XWHE )
+   {
+ cad_ena <- paste("select * from", XDADES, XWHE, sep=" ")
+ XDADES_SQL <- sqldf(cad_ena)
+ return(XDADES_SQL)
+   }
> DADES_SEL = SQL_PROVA(XDADES = "Aids2", XWHE = c("where  state in ('NSW', 
> 'QLD') and age < 40") ) 

> table (DADES_SEL$state)
  NSW Other   QLD   VIC 
 1102 0   128 0 

> max (DADES_SEL$age)
[1] 39


Gracias de nuevo!! Saludos!


On Mon, 27 Jul 2015 16:01:49 +0200
Carlos Ortega  wrote:

> Puedes construir la query de esta otra forma y sí que funciona:
> 
> #
> library(MASS)
> library(sqldf)  # Per SQL
> data(Aids2, package="MASS")
> SQL_PROVA = function (XDADES, XWHE )
>  {
>cad_ena <- paste("select *  from", XDADES, XWHE, sep=" ")
>XDADES_SQL <- sqldf(cad_ena)
>return(XDADES_SQL)
>}
>  DADES_SEL = SQL_PROVA(XDADES = "birthwt", XWHE = c("where age < 40") )
>  DADES_SEL
> #
> 
> Fíjate también en cómo incluyo los parámetros de la llamada en la función.
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> 2015-07-27 14:14 GMT+02:00 Griera-yandex :
> 
> > Hola Carlos:
> >
> > Gracias por responder!
> >
> > Ayer caí en esta página al buscar el problema con google, pero no
> > conseguir entender y implementar lo que sugiere. Sin entender nada, lo que
> > hice fue:
> >
> > 
> > > library(MASS)
> > > library (sqldf)  # Per SQL
> > > data(Aids2, package="MASS")
> > > SQL_PROVA = function (XDADES, XWHE)
> > +   {
> > +   XDADES_SQL = sqldf ("select * from $XDADES $XWHE")
> > +   return(XDADES_SQL)
> > +   }
> > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")
> > Error in sqliteSendQuery(con, statement, bind.data) :
> >   error in statement: near "$XDADES": syntax error
> > 
> >
> > Evidentemente da error.
> >
> > Tampoco funcionaba si introducía \"age\" en el agumento del where:
> >
> > 
> > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where \"age\" < '40'")
> > Error in sqliteSendQuery(con, statement, bind.data) :
> >   error in statement: near "$XDADES": syntax error
> > 
> >
> > He buscado ejemplos con google. pero no he encontrado nada.
> >
> > Gracias y saludos.
> >
> >
> > On Mon, 27 Jul 2015 12:45:50 +0200
> > Carlos Ortega  wrote:
> >
> > > Hola,
> > >
> > > Mira la página de "sqldf" en GitHub, viene un ejemplo, entre otras muchas
> > > cosas, que lo explica:
> > >
> > > https://github.com/ggrothendieck/sqldf#Example_5._Insert_Variables
> > >
> > > #--
> > > # 5
> > > minSL <- 7
> > > limit <- 3
> > > fn$sqldf('select * from iris where "Sepal.Length" > $minSL limit $limit')
> > > #--
> > >
> > > Saludos,
> > > Carlos Ortega
> > > www.qualityexcellence.es
> > >
> > >
> > > 2015-07-27 12:00 GMT+02:00 Griera :
> > >
> > > > Hola:
> > > >
> > > > No consigo que la función sqldf () funcione dentro de una función.
> > Alguien
> > > > puede echarme una mano. En resumen, el problema es que cuando lo
> > ejecuto
> > > > fuera de una función no tengo ningún problema:
> > > >
> > > > ==
> > > > > # install.packages("sqldf")
> > > > > library(MASS)
> > > > > library (sqldf)
> > > > > data(Aids2, package="MASS")
> > > > > options(digits=3)
> > > >
> > > > > table (Aids2$state)
> > > >   NSW Other   QLD   VIC
> > > >  1780   249   226   588
> > > >
> > > > > max (Aids2$age)
> > > > [1] 82
> > > >
> > &g

Re: [R-es] ayuda con análisis de supervivencia

2015-08-03 Thread Griera
Hola:

A que te refieres como "el bmi hasta el evento"?

Respecto que no sea un tiempo de supervivencia, no eres el único. En este 
artículo tampoco utilizan un "tiempo":

http://www.ncbi.nlm.nih.gov/pubmed/8970394

Saludos.


On Sun, 2 Aug 2015 19:19:45 +0200
JM ARBONES  wrote:

> Hola a todos,
> -Estoy estudiando el efecto de dos genotipos (~tratamientos) en la aparición 
> de síndrome metabólico (MetS) con datos longitudinales recogidos a tiempo 
> 0,7,10,15,20 y 25 años.
> 
> -He hecho un dataframe con las siguientes variables
> MetS: Síndrome Metabólico (Si=1,No=0)
> bmi: Indice de masa corporal (IMC) cuando se produce la conversión a MetS+ . 
> Para los que permancen MetS-, esta variable indica el bmi cuando hay censura 
> (por abandono del estudio o al finalizar el estudio en el año 25).
> bmi0: IMC al inicio del estudio (categórica, levels=normal/overweight/obese)
> apoE4: Genotipo de interés (E4, no-E4)
> 
> -Mi hipótesis es que la interacción genotipo~MetS depende del IMC al 
> principio del estudio. Concretamente, individuos 'overweight' al inicio del 
> estudio y con el genotipo E4 hacen la conversión a MetS+ a valores de IMC mas 
> bajos que los que tienen el genotipo no-E4. Este fenómeno no ocurriría en los 
> 'normal' y 'obese'.
> 
> -He creado unos objetos Surv, pero en lugar de utilizar el tiempo hasta 
> evento (MetS+) estoy utilizando el bmi hasta el evento. Las gráficas que 
> resultan al hacer el análisis de supervivencia parecerían confirmar mi 
> hipótesis, pero no se si lo que estoy haciendo es una aberración estadística. 
> Tampoco se si los coeficientes de la regresión de Cox tienen sentido al no 
> utilizar la variable tiempo.
> 
> ?Alguien me podría 1)decir si lo que estoy haciendo tiene sentido y 2) como 
> interpretar los resultados (regresión de Cox y gráficas)?
> Si a alguien se anima a contestar, adjunto un link con los datos (.Rdata) y 
> el script que he utilizado en el análisis.
> 
> 
> https://www.dropbox.com/s/d96itird8ms42yx/dataframe.Rdata?dl=0 
> 
> 
> sapply(levels(df0$bmi0),function (x){ #SURVIVAL CURVE
>   dfx=filter(df0,bmi0==x)
>   
>   surv2=Surv(dfx$bmi,dfx$MetS)
>   km2=survfit(surv2~dfx$apoe4)##start.time=20,type='kaplan')
>   plot(km2,lty=2:1,xlim=c(20,41),xlab='BMI at onset',main=x,mark.time = F)
>   legend('bottomleft',c('E4','no-E4'),lty=2:1)
>   cox=list(coxph(surv2~relevel(dfx$apoe4,ref='no-E4')))
> })
> 
> sapply(levels(df0$bmi0),function (x){ #CUMULATIVE HAZARDs
>   dfx=filter(df0,bmi0==x)
>   
>   surv2=Surv(dfx$bmi,dfx$MetS)
>   km2=survfit(surv2~dfx$apoe4)
>   plot(km2,lty=2:1,xlim=c(20,41),xlab='BMI at onset',main=x,mark.time = 
> F,fun='cumhaz')
>   legend('topleft',c('E4','no-E4'),lty=2:1)
>   
> })
> 
> Muchas gracias y un saludo
> 
> Jose Miguel
> 
> ---
> 
> Jose Miguel Arbones-Mainar, PhD
> Unidad de Investigación Traslacional 
> Instituto Aragones de Ciencias de la Salud 
> Hospital Universitario Miguel Servet 
> Pº Isabel la Católica, 1-3 
> 50009 Zaragoza (Spain) 
> Tel: +34 976 769 565
> Fax: +34 976 769 566 
> www.adipofat.com 
> 
> 
> 
> 
> ---
> Jose Miguel Arbones-Mainar
> www.adipofat.com 
> 
> 
> 
> 
> 
> 
> 
>   [[alternative HTML version deleted]]
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Gráfico tiempos de supervivencia

2019-07-19 Thread Griera
Hola: 

Por si a alguien le interesa para un curso, aquí coloco la versión
definitiva de los dos gráficos que quería hacer (uno en escala del tiempo del 
calendario y la otra el tiempo de seguimiento) realizados gracias a la ayuda
de Carlos Ortega.

Muchas gracias y saludos.

# Código 
set.seed(20)
# TIEMPO_2 = sample(1:40, 10, replace=F)
XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic amb t=0
set.seed(30)
XTIEMPO_0 = sample(1:40, 10, replace=F)
XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
set.seed(20)
# XDEF = as.factor(sample(c(0,1), 10, replace=T))
XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))

DATOS <- data.frame (
  ID = c (1:10)
, TIEMPO_0 = XTIEMPO_0
, TIEMPO_F = XTIEMPO_F
, TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
, DEF  = XDEF
)

library(ggplot2)

## Gràfic amb temps calendari
ggplot( data = DATOS ) +
  geom_point( aes(x = TIEMPO_F, y = ID , shape = DEF), size = 5 ) +
  geom_segment( aes( x = TIEMPO_0, y = ID,   xend = TIEMPO_F, yend = ID ) ) +
  scale_shape_manual (values = c(4, 16))  +
  xlim (0, 70) +
  xlab ("Data (temps del calendari)") +
  ylab ("Persones") +
   guides(colour = FALSE) +
   labs(shape = ' ', values = c(4, 16)) +
   scale_y_discrete() +
  theme_classic() +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
## Modificat 
str (DATOS)
ggplot( data = DATOS ) +
  geom_point( aes(x = TIEMPO_2, y = ID , shape = DEF), size = 5 ) +
  scale_shape_manual (values = c(4, 16))  +
  geom_segment( aes( x = 0, y = ID,   xend = TIEMPO_2, yend = ID ) ) +
  xlim (0, 70) +
  xlab ("Temps de seguiment") +
  ylab ("Persones") +
   guides(colour = FALSE) +
   labs(shape = ' ', values = c(4, 16)) +
   scale_y_discrete() +
  theme_classic()

# Código 


On Thu, 18 Jul 2019 14:21:24 +0200
Carlos Ortega  wrote:

> Hola,
> 
> Sí, lo puedes hacer de esta forma...
> 
> #-
> set.seed(20)
> DATOS <- data.frame (
> ID  = c (1:10)
>   , TIEMPO  = sample(1:40, 10, replace=F)
>   , DEF = as.factor(sample(c(0,1), 10, replace=T))
> )
> 
> library(ggplot2)
> 
>   ggplot( data = DATOS ) +
>geom_point( aes(x = TIEMPO, y = ID , shape = DEF, color = DEF), size = 5
> ) +
>geom_segment( aes( x = 0, y = ID,  xend = TIEMPO, yend = ID ) ) +
> guides(colour = FALSE) +
> labs(shape = 'LEGEND') +
> scale_y_discrete() +
>theme_minimal()
> #-
> 
> E incluso puedes reproducirlo usando fuentes parecidas a la de los comics
> con el paquete "xkcd".
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> 
> El jue., 18 jul. 2019 a las 13:05, Griera-yandex ()
> escribió:
> 
> > Hola Pedro:
> >
> > Gracias por la ayuda. No conocía esta manera más elegante de mostrar las
> > curvas de Kaplan-Meier. Te la compro.
> >
> > En realidad quería mostrar un gráfico con la longitud de les tiempos de
> > seguimiento y al final un símbolo para indicar el estado. Seria un gráfico
> > similar a:
> >
> > https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png
> >
> > Pero no encuentro la manera de hacerlo. Igual no se puede.
> >
> > Muchas gracias y saludos.
> >
> > On Thu, 18 Jul 2019 10:28:37 +
> > PEDRO CONCEJERO CEREZO  wrote:
> >
> > > Hola, te vale esto? Es forma estandar de representar graficos
> > supervivencia
> > >
> > > Basado en esto:
> > >
> > > https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/
> > >
> > > set.seed(20)
> > >
> > > DATOS <- data.frame (
> > >   ID  = c (1:10)
> > >   , TIEMPO  = sample(1:40, 10, replace=F)
> > >   , DEF = sample(0:1, 10, replace=T)
> > > )
> > >
> > > DATOS
> > >
> > > library(survival)
> > >
> > > DATOS$DEF <- as.numeric(DATOS$DEF)
> > > DATOS$TIEMPO <- as.numeric(DATOS$TIEMPO)
> > >
> > > s <- Surv(DATOS$TIEMPO, DATOS$DEF)
> > > head(s)
> > >
> > > ## Kaplan-Meier estimator.
> > > km <- survfit(s ~ 1,
> > >   data = DATOS,
> > >   conf.type = "log-log")
> > >
> > > ## Show object
> > > km
> > >
> > > summary(km)
> > >
> > > plot(km)
> > >
> > > # Instala las librerías necesarias:
> > > library(ranger)
> > > library(ggplot2)
> > > library(dplyr)
> > > library

Re: [R-es] Gráfico tiempos de supervivencia

2019-08-06 Thread Griera-
Hola Francisco:

Muchas gracias por este refinamiento. 

Tienes razón, el gráfico de Lexis representa mucho mejor los datos. 

Y gracias por el código. Lo guardo también para el futuro.

Saludos

On Tue, 6 Aug 2019 10:37:24 +0200
Francisco Viciana  wrote:

> Hola, aunque con un poco de retraso, hago una aportación a este hilo:
> 
> Si tienes un problema con dos escalas de tiempo sobre las que 
> evolucionan las lineas de seguimiento, creo que es mejor que hacer un 
> solo gráfico en forma de   diagrama de Lexis, que dos gráficos 
> independientes. Muestro ejemplo usando el paquete "Epi":
> 
> # Código 
> 
> # Generar Datos 
> rm(list = ls())
> set.seed(20)
> XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic 
> amb t=0
> set.seed(30)
> XTIEMPO_0 = sample(1:40, 10, replace=F)
> XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> set.seed(20)
> XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> 
> DATOS <- data.frame (
>    ID = c (1:10)
>    , TIEMPO_0 = XTIEMPO_0
>    , TIEMPO_F = XTIEMPO_F
>    , TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
>    , DEF  = XDEF
> )
> 
> 
> names(DATOS)[2:5] <- c('marriage.age',
>     'output.age',
>     'duration','output')
> 
> DATOS$output <- factor(DATOS$output,levels = c('Casado','Viu','Mort'))
> DATOS$entry  <- factor('Casado',levels = c('Casado','Viu','Mort'))
> 
> # Crea objeto Lexis:
> library(Epi)
> lx.Datos <- Lexis( entry=list(antiguedad.del.matrimonio=0,
>     edad=marriage.age),
>      exit=list(edad=output.age),
>      entry.status = entry ,
>      exit.status = output ,id=ID,data=DATOS,merge=F)
> 
> #  Muestra datos originales y transformados
> DATOS
> lx.Datos
> 
> # Grafica: 
> 
> plot.Lexis(lx.Datos,time.scale = 1:2,col='blue')
> with(lx.Datos, points(x=lex.dur,y=edad+lex.dur,
> pch=c(NA,19,3)[as.integer(lex.Xst)],
>    col=1 ))
> grid()
> legend('bottomright',legend = levels(lx.Datos$lex.Xst)[-1],
>     pch=c(19,3),col=1)
> 
> ## --
> 
> On 19/7/19 15:03, Griera wrote:
> > Hola:
> >
> > Por si a alguien le interesa para un curso, aquí coloco la versión
> > definitiva de los dos gráficos que quería hacer (uno en escala del tiempo 
> > del calendario y la otra el tiempo de seguimiento) realizados gracias a la 
> > ayuda
> > de Carlos Ortega.
> >
> > Muchas gracias y saludos.
> >
> > # Código 
> > set.seed(20)
> > # TIEMPO_2 = sample(1:40, 10, replace=F)
> > XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic amb 
> > t=0
> > set.seed(30)
> > XTIEMPO_0 = sample(1:40, 10, replace=F)
> > XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> > set.seed(20)
> > # XDEF = as.factor(sample(c(0,1), 10, replace=T))
> > XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> >
> > DATOS <- data.frame (
> >   ID = c (1:10)
> > , TIEMPO_0 = XTIEMPO_0
> > , TIEMPO_F = XTIEMPO_F
> > , TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
> > , DEF  = XDEF
> > )
> >
> > library(ggplot2)
> >
> > ## Gràfic amb temps calendari
> > ggplot( data = DATOS ) +
> >geom_point( aes(x = TIEMPO_F, y = ID , shape = DEF), size = 5 ) +
> >geom_segment( aes( x = TIEMPO_0, y = ID,   xend = TIEMPO_F, yend = ID ) 
> > ) +
> >scale_shape_manual (values = c(4, 16))  +
> >xlim (0, 70) +
> >xlab ("Data (temps del calendari)") +
> >ylab ("Persones") +
> > guides(colour = FALSE) +
> > labs(shape = ' ', values = c(4, 16)) +
> > scale_y_discrete() +
> >theme_classic() +
> >theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
> > ## Modificat
> > str (DATOS)
> > ggplot( data = DATOS ) +
> >geom_point( aes(x = TIEMPO_2, y = ID , shape = DEF), size = 5 ) +
> >scale_shape_manual (values = c(4, 16))  +
> >geom_segment( aes( x = 0, y = ID,   xend = TIEMPO_2, yend = ID ) ) +
> >xlim (0, 70) +
> >xlab ("Temps de seguiment") +
> >ylab ("Persones") +
> > guides(colour = FALSE) +
> > labs(shape =

Re: [R-es] Gráfico tiempos de supervivencia

2019-08-08 Thread Griera
Hola Francisco:

Muchas gracias por este refinamiento. 

Tienes razón, el gráfico de Lexis representa mucho mejor los datos. 

Y gracias por el código. Lo guardo también para el futuro.

Saludos


On Thu, 8 Aug 2019 09:42:50 +0200
Francisco Viciana  wrote:

> Hola, aunque con un poco de retraso, hago una aportación a este hilo:
> 
> Si tienes un problema con dos escalas de tiempo sobre las que 
> evolucionan las lineas de seguimiento, creo que es mejor que hacer un 
> solo gráfico en forma de   diagrama de Lexis, que dos gráficos 
> independientes. Muestro ejemplo usando el paquete "Epi":
> 
> # Código 
> 
> # Generar Datos 
> rm(list = ls())
> set.seed(20)
> XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic 
> amb t=0
> set.seed(30)
> XTIEMPO_0 = sample(1:40, 10, replace=F)
> XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> set.seed(20)
> XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> 
> DATOS <- data.frame (
>    ID = c (1:10)
>    , TIEMPO_0 = XTIEMPO_0
>    , TIEMPO_F = XTIEMPO_F
>    , TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
>    , DEF  = XDEF
> )
> 
> 
> names(DATOS)[2:5] <- c('marriage.age',
>     'output.age',
>     'duration','output')
> 
> DATOS$output <- factor(DATOS$output,levels = c('Casado','Viu','Mort'))
> DATOS$entry  <- factor('Casado',levels = c('Casado','Viu','Mort'))
> 
> # Crea objeto Lexis:
> library(Epi)
> lx.Datos <- Lexis( entry=list(antiguedad.del.matrimonio=0,
>     edad=marriage.age),
>      exit=list(edad=output.age),
>      entry.status = entry ,
>      exit.status = output ,id=ID,data=DATOS,merge=F)
> 
> #  Muestra datos originales y transformados
> DATOS
> lx.Datos
> 
> # Grafica: 
> 
> plot.Lexis(lx.Datos,time.scale = 1:2,col='blue')
> with(lx.Datos, points(x=lex.dur,y=edad+lex.dur,
> pch=c(NA,19,3)[as.integer(lex.Xst)],
>    col=1 ))
> grid()
> legend('bottomright',legend = levels(lx.Datos$lex.Xst)[-1],
>     pch=c(19,3),col=1)
> 
> ## --
> 
> On 19/7/19 15:03, Griera wrote:
> > Hola:
> >
> > Por si a alguien le interesa para un curso, aquí coloco la versión
> > definitiva de los dos gráficos que quería hacer (uno en escala del tiempo 
> > del calendario y la otra el tiempo de seguimiento) realizados gracias a la 
> > ayuda
> > de Carlos Ortega.
> >
> > Muchas gracias y saludos.
> >
> > # Código 
> > set.seed(20)
> > # TIEMPO_2 = sample(1:40, 10, replace=F)
> > XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic amb 
> > t=0
> > set.seed(30)
> > XTIEMPO_0 = sample(1:40, 10, replace=F)
> > XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> > set.seed(20)
> > # XDEF = as.factor(sample(c(0,1), 10, replace=T))
> > XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> >
> > DATOS <- data.frame (
> >   ID = c (1:10)
> > , TIEMPO_0 = XTIEMPO_0
> > , TIEMPO_F = XTIEMPO_F
> > , TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
> > , DEF  = XDEF
> > )
> >
> > library(ggplot2)
> >
> > ## Gràfic amb temps calendari
> > ggplot( data = DATOS ) +
> >geom_point( aes(x = TIEMPO_F, y = ID , shape = DEF), size = 5 ) +
> >geom_segment( aes( x = TIEMPO_0, y = ID,   xend = TIEMPO_F, yend = ID ) 
> > ) +
> >scale_shape_manual (values = c(4, 16))  +
> >xlim (0, 70) +
> >xlab ("Data (temps del calendari)") +
> >ylab ("Persones") +
> > guides(colour = FALSE) +
> > labs(shape = ' ', values = c(4, 16)) +
> > scale_y_discrete() +
> >theme_classic() +
> >theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
> > ## Modificat
> > str (DATOS)
> > ggplot( data = DATOS ) +
> >geom_point( aes(x = TIEMPO_2, y = ID , shape = DEF), size = 5 ) +
> >scale_shape_manual (values = c(4, 16))  +
> >geom_segment( aes( x = 0, y = ID,   xend = TIEMPO_2, yend = ID ) ) +
> >xlim (0, 70) +
> >xlab ("Temps de seguiment") +
> >ylab ("Persones") +
> > guides(colour = FALSE) +
> > labs(shape =

[R-es] SAS proc genmod con opción repeated

2021-05-08 Thread Griera
Buenas tardes, Lista:

¿Alguien me podría decir que función de R podría substituir al proc
genmod con la opción "repeated subject"?

Muchas gracias y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] SAS proc genmod con opción repeated

2021-05-15 Thread Griera
Hola Freddy:

Gracias por responder y disculpa que no haya respondido hasta ahora: no había 
vista tu respuesta.

Tengo dos problemas de datos correlacionados:

- Un estudio con un muestreo de pacientes visitados en atención
  primaria con un diagnóstico concreto durante los últimos cinco años.
  Para para cada enfermo, se han seleccionado tres controles sin el diagnóstico 
y apareados
  por edad y sexo y visitados en el mismo momento. La idea es comparar
  los casos y los controles y el problema es que son datos
  correlacionados que en SAS hubiese analizado con el
  GENMOD y la opción "repeated subject".   

- Un estudio de casos y controles con cuatro controles por caso, pero con casos 
a los que no se consiguió encontrar un control adecuado. También lo hubiese 
analizado con el GENMOD y la opción "repeated subject". La pregunta es la 
clásica de un estudio de casos y controles : los casos han estados más expuetos 
que los controles?

Espero haberme explicado mejor esta vez.

Muchas gracias y saludos.

On Mon, 10 May 2021 19:10:15 -0400
Freddy Omar López Quintero  wrote:

> Hola.
> 
> Sin una descripción más amplia de lo que buscas es difícil ayudar. Por lo
> pronto, MASS::glmmPQL creo que hace lo que buscas, pero no lo sé con
> certeza. Los PROC de SAS suelen abarcar muchísimo más que las funciones de
> R.
> 
> Saludos.
> 
> On Sat, May 8, 2021 at 11:59 AM Griera  wrote:
> 
> > Buenas tardes, Lista:
> >
> > ¿Alguien me podría decir que función de R podría substituir al proc
> > genmod con la opción "repeated subject"?
> >
> > Muchas gracias y saludos.
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
> 
> -- 
> «...my role is to be on the bottom of things.»
> 
> Donald Knuth

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Gráfica con dos ejes

2021-07-10 Thread Griera
Hola:

Con ggplot2, al ser dos variables totalmente diferentes, es complicado.

Con los graficos basicos aquí está un ejemplo:

https://www.r-bloggers.com/2015/04/r-single-plot-with-two-different-y-axes/

set.seed(2015-04-13)
d = data.frame(x =seq(1,10),
   n = c(0,0,1,2,3,4,4,5,6,6),
   logp = signif(-log10(runif(10)), 2))
par(mar = c(5,5,2,5))
with(d, plot(x, logp, type="l", col="red3", 
 ylab=expression(-log[10](italic(p))),
 ylim=c(0,3)))
par(new = T)
with(d, plot(x, n, pch=16, axes=F, xlab=NA, ylab=NA, cex=1.2))
axis(side = 4)
mtext(side = 4, line = 3, 'Number genes selected')
legend("topleft",
   legend=c(expression(-log[10](italic(p))), "N genes"),
   lty=c(1,0), pch=c(NA, 16), col=c("red3", "black"))

Espero que te ayude. Saludos.

On Fri, 9 Jul 2021 01:32:02 -0400
"Eric Concha M."  wrote:

> 
>  Hola Marco, aquí hay dos aproximaciones al problema con dos de las
>  librerías más usadas para hacer gráficos (además de base):
> 
> 1. Con la librería latticeExtra
> 
> https://www.r-graph-gallery.com/145-two-different-y-axis-on-the-same-plot.html
> 
> 
> 
> 2. Con la librería ggplot:
> 
> https://www.r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html
> 
> 
> 
> Debo decir, eso sí, que este tipo de gráficos no se recomienda pues
> puede conducir a conclusiones erradas, en fin ...
> 
> Suerte !!!
> 
> Eric.
> 
> pd. si compartes los datos, una parte al menos, se podría escribir
> algo que te sirva más directamente.
> 
> 
> 
> 
> 
> 
> 
> 
> On Fri, 9 Jul 2021 03:55:41 +
> "Marco Aurelio Gonzalez Tagle (FCF)"  wrote:
> 
> > Muy buenos días a todos!
> > 
> > Podrían ayudarme con mi siguiente problema?
> > Estoy tratando de preparar en R una gráfica con dos ejes en Y.
> > 
> > El primer eje contiene el número de incendios ocurridos en un periodo
> > de tiempo 1998 a 2021 (Barplot), El segundo eje contiene la
> > superficie afectada (line). Algo parecido a la siguiente gráfica
> > 
> > [cid:6E223ADDD0F44EC489B007E3D3DB69F7]
> > 
> > Alguien podría apoyarme para conseguir realizar una gráfica parecida
> > a la de arriba, Saludos, Marco
> > 
> > 
> > 
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Pasar nombre variable regresión

2021-11-18 Thread Griera
Hola, buenos días:

No es un problema concreto que tenga ahora, pero es un problema general
que no se si tiene solución fácil. Hago una regresión (de lm.html):

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)

Si quiero que la variable independiente sea una "variable", y hago:

X = "group"
lm.D9 <- lm(weight ~ X)

Y da el error: Error in model.frame.default(formula = XVD ~ group, 
drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'group')

Ya que, como me decían el otro día "estás asignando a la variable X el valor 
"X" y no el
contenido de la variable X."

¿No hay forma de que entienda que "X" es el nombre de la variable independiente 
"group", que no sea pasar la posición de la variable?

Muchas gracias y saludos a todos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] reemplazar valores de una variable por otras

2021-11-21 Thread Griera
Hola, Javier:

[Entre líneas]
On Fri, 19 Nov 2021 15:57:28 -0300
Javier Marcuzzi  wrote:

> Estimados
> 
> Personalmente yo uso esa forma antes que if, pero, hay varias alternativas.

¿A que forma para solucionarlo te refieres? ¿Podrías extenderte un poco?

Muchas gracias por siempre ayudar y saludos.
ç
> 
> Javier Marcuzzi
> 
> El vie, 19 nov 2021 a las 5:01, Proyecto R-UCA () escribió:
> 
> > Buenas,
> >
> > ¿qué tal esto?
> >
> > Supongamos que las variables están en un data.frame d que tiene todas
> > esas columnas, entonces
> >
> > d$Direccion_Final <- d$Direccion
> > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Direccion_General
> > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Subsecretaria
> > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Secretaria
> >
> > Un saludo.
> >
> > P.D.: Quito las tildes de los nombres de las variables pues pueden dar
> > problemas de portabilidad.
> >
> > El jue, 18-11-2021 a las 15:35 -0300, juan manuel dias escribió:
> > > Hola, como andan!
> > > Necesito crear una variable nueva "Dirección_Final" que sea igual a
> > > la variable "Dirección", pero que si "Dirección" es NA traiga
> > > "Dirección General", si "Dirección General" es NA traiga
> > > "Subsecretaria", y si "Subsecretaria" es NA traiga "Secretaria".
> > > Estoy intentando con ifesle pero no logro llegar al resultado
> > > esperado! Les dejo un recorte de la base! Muchas gracias!
> > > Saludos, Juan.
> > > ___
> > > R-help-es mailing list
> > > R-help-es@r-project.org
> > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
>   [[alternative HTML version deleted]]
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] reemplazar valores de una variable por otras

2021-11-23 Thread Griera
Muchas, gracias Javier:

Independientemente del rendimiento, me apunto esta solución. Es muy clara, y yo 
nunca trabajo con tablas de billones de registros.

Gracias por siempre ayudar y saludos.

On Mon, 22 Nov 2021 17:13:48 -0300
Javier Marcuzzi  wrote:

> Estimado Griera
> 
> Cuándo me referí a que personalmente use esa forma, hacía referencia al
> correo que mencionó lo siguiente:
> 
> d$Direccion_Final <- d$Direccion
> d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Direccion_General
> d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Subsecretaria
> d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Secretaria
> 
> Posiblemente es una forma antigua dado que aparecieron otras alternativas,
> el rendimiento en su momento era mejor que if, aunque por ese lado también
> aparecieron formas de optimizar, al día de hoy desconozco el rendimiento en
> términos informáticos, pero es fácil de leer, un renglón por cada caso, lo
> que implica conocer los datos para analizar, muy automático no me gusta
> porque puedo perder noción de la información que le pido procesar a la
> computadora, pero claro, si hay miles o millones el trabajo se debe
> plantear de otra manera.
> 
> Javier Marcuzzi
> 
> El dom, 21 nov 2021 a las 8:20, Griera () escribió:
> 
> > Hola, Javier:
> >
> > [Entre líneas]
> > On Fri, 19 Nov 2021 15:57:28 -0300
> > Javier Marcuzzi  wrote:
> >
> > > Estimados
> > >
> > > Personalmente yo uso esa forma antes que if, pero, hay varias
> > alternativas.
> >
> > ¿A que forma para solucionarlo te refieres? ¿Podrías extenderte un poco?
> >
> > Muchas gracias por siempre ayudar y saludos.
> > ç
> > >
> > > Javier Marcuzzi
> > >
> > > El vie, 19 nov 2021 a las 5:01, Proyecto R-UCA ()
> > escribió:
> > >
> > > > Buenas,
> > > >
> > > > ¿qué tal esto?
> > > >
> > > > Supongamos que las variables están en un data.frame d que tiene todas
> > > > esas columnas, entonces
> > > >
> > > > d$Direccion_Final <- d$Direccion
> > > > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Direccion_General
> > > > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Subsecretaria
> > > > d$Direccion_Final[is.na(d$Direccion_Final)] <- d$Secretaria
> > > >
> > > > Un saludo.
> > > >
> > > > P.D.: Quito las tildes de los nombres de las variables pues pueden dar
> > > > problemas de portabilidad.
> > > >
> > > > El jue, 18-11-2021 a las 15:35 -0300, juan manuel dias escribió:
> > > > > Hola, como andan!
> > > > > Necesito crear una variable nueva "Dirección_Final" que sea igual a
> > > > > la variable "Dirección", pero que si "Dirección" es NA traiga
> > > > > "Dirección General", si "Dirección General" es NA traiga
> > > > > "Subsecretaria", y si "Subsecretaria" es NA traiga "Secretaria".
> > > > > Estoy intentando con ifesle pero no logro llegar al resultado
> > > > > esperado! Les dejo un recorte de la base! Muchas gracias!
> > > > > Saludos, Juan.
> > > > > ___
> > > > > R-help-es mailing list
> > > > > R-help-es@r-project.org
> > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > > >
> > > > ___
> > > > R-help-es mailing list
> > > > R-help-es@r-project.org
> > > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > > >
> > >
> > >   [[alternative HTML version deleted]]
> > >
> > > ___
> > > R-help-es mailing list
> > > R-help-es@r-project.org
> > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Modificar una serie columnas de un dataframe

2023-01-26 Thread Griera
Hola:

Lo vuelvo a enviar para ver si tengo más suerte:

Tengo una tabla con pares de variables (V1a, V1b, V2a, V2b, ...) similar a esta:

df <- data.frame( V1a = sample(c("1","0"), 10, TRUE)
, V1b = sample(c("1","0"), 10, TRUE)
, V2a = sample(c("1","0"), 10, TRUE)
, V2b = sample(c("1","0"), 10, TRUE))

   V1a V1b V2a V2b
10   1   0   0
20   0   1   0
30   1   0   0
...

y quiero que V1a valga "1" si V1a o V1b valen 1, V2a valga "1" si V2a o
V2b valen 1 y así sucesivamente. Lo hago mediante un transform con una línia 
para cada pareja de variables:

df <- transform (df
, V1a = ifelse (V1a == "1" | V1b == "1", "1, "0")
, V2a = ifelse (V2a == "1" | V2b == "1", "1, "0"))

)
¿Habria forma de hacerlo (¿con un función?) de manera que no tenga que escribir 
una línia para cada par de variables?

Muchas gracias a todos y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Resumen de R-help-es, Vol 167, Envío 10

2023-01-28 Thread Griera
Hola, Carlos:

Gracias, funciona también a la perfección y muy ingeniosa la solución.

Disculpa si no te he respondido antes, pero hasta ahora no he podido privarlo.

Gracias por la ayuda y saludos.

On Fri, 27 Jan 2023 01:40:48 +0100
Carlos Ortega  wrote:

> Hola,
> 
> Otra alternativa...
> 
> #
> > library(data.table)
> > library(tidytable)
> > library(stringi)
> >
> > df <- data.frame(   V1a = sample(c("1","0"), 10, TRUE)
> +   , V1b = sample(c("1","0"), 10, TRUE)
> +   , V2a = sample(c("1","0"), 10, TRUE)
> +   , V2b = sample(c("1","0"), 10, TRUE))
> > df
>V1a V1b V2a V2b
> 11   0   1   1
> 21   1   0   1
> 30   0   0   0
> 41   0   1   0
> 50   1   0   0
> 60   0   1   0
> 71   0   0   0
> 81   1   1   0
> 90   0   0   0
> 10   0   1   1   1
> > > #--- Función compara parejas de columnas comienzan por mismas 2 letras.
> > *colcompare <- function(df)* {
> +
> +nam_val <- names(df) %>% stri_sub(from = 1, to = 2) %>% unique()
> +res_df  <- data.table()
> +for (i in 1:length(nam_val)) {
> +  cols_tmp <- nam_val[i]
> +  df_tmp <- df %>% select.(starts_with(cols_tmp)) %>%
> +rename.( a = 1) %>%
> +rename.( b = 2) %>%
> +mutate.( c = if_else.( a == 1 | b == 1, 1, 0)) %>%
> +select.(c) %>%
> +as.data.table()
> +names(df_tmp) <- paste0(cols_tmp, "c")
> +res_df <- cbind(res_df, df_tmp)
> +}
> +return(res_df)
> + }
> >
> > #--- Sobre df creado
> > *resultado <- colcompare(df)*
> > resultado
>   V1c   V2c
>  
>  1: 0 1
>  2: 1 0
>  3: 1 1
>  4: 1 1
>  5: 1 1
>  6: 1 1
>  7: 1 1
>  8: 0 0
>  9: 1 1
> 10: 0 1
> #
> 
> 
> Gracias,
> Carlos Ortega
> www.qualityexcellence.es
> 
> El jue, 26 ene 2023 a las 19:55, Griera-yandex ()
> escribió:
> 
> > Hola:
> >
> > Funciona a la perfección. Y los nombres de las nuevas variables tipo "V1c"
> > "V2c"... ya me está bien.
> >
> > Gracias por habertelo currado tanto! Me has ahorrado copiar, pegar y
> > modificar un monton de linias. Y no
> > tenia conciencia de que podia ser tan complicado.
> >
> > Gracias por la ayuda. Saludos.
> >
> > On Thu, 26 Jan 2023 09:33:31 -0500
> > patricio fuenmayor  wrote:
> >
> > > Hola esta es una solución
> > >
> > > library(data.table)
> > > library(stringr)
> > >
> > >
> > > dt <- data.table( V1a = sample(c("1","0"), 10, TRUE)
> > > , V1b = sample(c("1","0"), 10, TRUE)
> > > , V2a = sample(c("1","0"), 10, TRUE)
> > > , V2b = sample(c("1","0"), 10, TRUE)
> > > , V3a = sample(c("1","0"), 10, TRUE)
> > > , V3b = sample(c("1","0"), 10, TRUE)
> > > , V4a = sample(c("1","0"), 10, TRUE)
> > > , V4b = sample(c("1","0"), 10, TRUE))
> > > dt[,":="(seq=.I)]
> > > setcolorder(dt,"seq")
> > >
> > > dt1 <- melt(dt,id.vars=1,measure.vars=2:ncol(dt),variable.name="vrb",
> > > value.name="vl")
> > > dt1[,":="(vrb_nm=str_sub(vrb,end=2),vrb_tp=str_sub(vrb,start=-1))]
> > > dt2 <- dcast(dt1,seq+vrb_nm~vrb_tp,fun.aggregate=\(x)
> > > paste0(x,collapse="|"),value.var="vl")
> > > dt2[,":="(c=fifelse(a=="1"|b=="1","1","0"))]
> > > dt3 <-dcast(dt2,seq~vrb_nm,fun.aggregate=\(x)
> > > paste0(x,collapse="|"),value.var="c")
> > > setnames(dt3,paste0(colnames(dt3),"c"))
> > > dt <- dt[dt3,on=.(seq=seqc)]
> > >
> > > Te crea un grupo de variables tipo c que es la lógica que necesitas ..
> > pero
> > > le puedes reemplazar por el nombre de "a", qué es lo que muestras en el
> > > ejemplo
> > >
> > >
> > > Saludos
> > >
> > >
> > >
> > >
> > > El jue, 26 ene 2023 a la(s) 06:02, 
> > > escribió:
> >

Re: [R-es] ver el código de randomForest

2023-03-18 Thread griera
Hola:

No se muy bien si es esto lo que preguntas, pero el código de todos los scripts 
está en el fichero:

https://cran.r-project.org/src/contrib/randomForest_4.7-1.1.tar.gz

Saludos.

On Sun, 19 Mar 2023 04:35:44 +0100
Manuel Mendoza  wrote:

> Buenos días, ¿cómo podría ver el código con el que el paquete randomForest
> hace el random forest?
> Gracias,
> Manuel
> 
>   [[alternative HTML version deleted]]
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Expresión en un objeto

2023-08-10 Thread Griera
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@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Loop for: mostrar el nombre de la variables

2015-06-30 Thread Griera-yandex
Hola Olivier:

Muy elegante esta solución! Es lo que necesitaba.

Gracias y saludos.


On Tue, 30 Jun 2015 12:28:06 +0200 (CEST)
Olivier Nuñez  wrote:

> Un opción más elegante:
> 
> DES = function(x)
>   {
>   res=NA
>   if(is.numeric(x)) res=mean(x)
>   else if(is.factor(x))
> {
>   res <- as.data.frame(table(x))
>   res <- transform(res, cumFreq = cumsum(Freq), relative 
> = prop.table(Freq))
> }
>   return(res) 
>   }
> 
> > lapply(TBL,DES)
> $SE
>   x Freq cumFreq relative
> 1 H8   8  0.8
> 2 M2  10  0.2
> 
> $ED
> [1] 56.3203
> 
> 
> 
> Un saludo. Olivier

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Convertir un factor HORA en una hora de R

2015-07-02 Thread Griera-yandex
Muchas gracias, Carlos!

Instalado el "enésimo paquete" (si no hay más remedio . . .) y perfecto!! 
Solucionado!!

(le tengo cierta alergia a los enésimos paquetes: hasta ahora he sido usuario 
ocasional de R y más de uno que he utilizado, de repente desaparece de r-cran).

Gracias por la rapidez y saludos.



On Thu, 2 Jul 2015 16:35:25 +0200
Carlos Ortega  wrote:

> Hola,
> 
> La alternativa que te propongo es utilizando ese "enésimo paquete"...:
> 
> #
> > library(lubridate)
> > DATOS <- data.frame(FECHA=c("31/10/2014","23/10/2014", "31/10/2014"),
> + HORA=c("01:23", "12:43", "23:09"))
> >
> > library(lubridate)
> > fechas <- dmy(DATOS$FECHA)
> > horas <- hm(DATOS$HORA)
> >
> > fechas
> [1] "2014-10-31 UTC" "2014-10-23 UTC" "2014-10-31 UTC"
> > horas
> [1] "1H 23M 0S"  "12H 43M 0S" "23H 9M 0S"
> 
> #--
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> 
> 
> 
> El 2 de julio de 2015, 16:20, Griera  escribió:
> 
> > Hola:
> >
> > Tengo unos datos con varias fechas y horas como texto (son independientes:
> > las horas no corresponden al día de la fecha). Seria algo como:
> >
> > DATOS <- data.frame(FECHA=c("31/10/2014","23/10/2014", "31/10/2014"),
> > HORA=c("01:23", "12:43", "23:09"))
> >
> > No tengo problema de convertir la fecha para poder realizar cálculos, ya
> > que existe mucha información en Internet:
> >
> > DATOS$FECHA = as.Date(DATOS$FECHA, format="%d/%m/%Y")
> >
> > > str(DATOS)
> > 'data.frame':   3 obs. of  2 variables:
> >  $ FECHA: Date, format: "2014-10-31" "2014-10-23" ...
> >  $ HORA : Factor w/ 3 levels "01:23","12:43",..: 1 2 3
> >
> > Pero no encuentro una función similar (as.Time) para HH:MM. Como puedo
> > convertir el factor HORA en una hora de R para poder hacer cálculos (p.
> > ej. diferencia de horas)? (a ser posible, sin necesidad de instalar el
> > enésimo paquete).
> >
> > Muchas gracias! Saludos
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
> 
> 
> -- 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar un listado de variables como argumento de una función

2015-07-07 Thread Griera-yandex
Hola Carlos:

He hecho una pruebas, y tienes razón. La solución de "[" es mejor. Imbuido del 
lenguaje de SAS, me parecía mejor subset. Lo cambio.

Gracias de nuevo y saludos!

On Tue, 7 Jul 2015 13:52:05 +0200
Carlos Ortega  wrote:

> Hola,
> 
> Pero con lo que quieres hacer, estás definiendo el objetivo de la función
> "subset()".
> Otra cosa es que no te funcione alguno de los casos.
> 
> A mí, el primer caso de "Excluir", me funciona:
> 
> > DATOS <- data.frame(SE= c("M", "H", "M", "M", "H"),
> + EDAD  = c(50,  60,  20,  18,  30),
> + GRP_S = c("B", "0", "B", "A", "B"),
> + HTA   = c("N", "S", "N", "N", "N"))
> > # Excluir
> > DATOS_S <- subset(DATOS, select = -c(EDAD, GRP_S))
> > names(DATOS_S)
> [1] "SE"  "HTA"
> 
> Para el caso de "Incluir", lo que definies como "c(SE, GRP_S:HTA)", ¿qué
> sentido tiene?.
> Estás definiendo una secuencia "GRP_S:HTA"  cuando ":" se utiliza en el
> contexto que quieres como secuencia entre dos números. Sí, los ":" también
> se utilizan como factores, pero para indicar una interacción de un modelo,
> que no es tu caso.
> 
> Cometiendo un "pecadillo" con la función "attach()" , porque de otra forma
> SE, EDAD y GRP_S no se entienden como variales en el entorno, mira el
> resultado de lo que obtienes:
> 
> > attach(DATOS)
> > c(SE, EDAD:GRP_S)
>  [1]  2  1  2  2  1 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33
> 32 31 30 29 28 27 26 25 24 23 22 21 20
> [37] 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3
> Warning messages:
> 1: In EDAD:GRP_S :
>   numerical expression has 5 elements: only the first used
> 2: In EDAD:GRP_S :
>   numerical expression has 5 elements: only the first used
> 
> Creo que para la elección de columnas, sigue siendo más recomendable el uso
> de "[" que de "subset()", en esa dirección va lo que te proponía. Y el caso
> de "Incluir", es el complementario de "Excluir", por lo que con esa
> solución puedes funcionar para cualquier caso.
> 
> Mira estas referencias adicionales:
> 
> http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset
> http://adv-r.had.co.nz/Subsetting.html#subsetting-operators
> 
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> El 7 de julio de 2015, 11:16, Griera  escribió:
> 
> > Hola:
> >
> > Gracias de nuevo por la ayuda!
> >
> > La solución, como no, funciona. Pero yo quería alguna cosa más flexible y
> > universal que le pudiera pasar como parámetro diferentes opciones de
> > incluir i excluir variables. Si estuviera fuera de la función seria:
> >
> > =
> > DATOS <- data.frame(SE= c("M", "H", "M", "M", "H"),
> > EDAD  = c(50,  60,  20,  18,  30),
> > GRP_S = c("B", "0", "B", "A", "B"),
> > HTA   = c("N", "S", "N", "N", "N"))
> > # Excluir
> > DATOS_S <- subset(DATOS, select = -c(EDAD, GRP_S))
> > names(DATOS_S)
> > DATOS_S <- subset(DATOS, select = -c(SE, EDAD:GRP_S))
> > names(DATOS_S)
> > # Incluir
> > DATOS_S <- subset(DATOS, select = c(SE, GRP_S:HTA))
> > names(DATOS_S)
> > =
> >
> > Pero cuando le paso a la función -c(EDAD, GRP_S)) o c(SE, GRP_S:HTA)), no
> > funciona. Existe alguna solución que pueda incorporar esta flexibilidad?
> >
> > Gracias Carlos y saludos.
> >
> >
> > On Tue, 7 Jul 2015 00:26:54 +0200
> > Carlos Ortega  wrote:
> >
> > > Hola,
> > >
> > > Puedes hacerlo de esta otra forma:
> > >
> > > #-
> > > DES = function(XDATOS, XDROP) {
> > >   #print(names(XDATOS))
> > >   #print(XDROP)
> > >   DATOS_S <- XDATOS[, setdiff(names(XDATOS), XDROP) ]
> > >   return(DATOS_S)
> > > }
> > >
> > > DES(DATOS, c("EDAD", "GRP_S"))
> > > #-
> > >
> > >
> > > Saludos,
> > > Carlos Ortega
> > > www.qualityexcellence.es
> > >
> > >
> > > El 6 de julio de 2015, 21:59, Griera  escribió:
> > >
> > > > Hol

Re: [R-es] Conservar el nombre de la variable entre varias funciones

2015-07-14 Thread Griera-yandex
Hola:

Gracias por interesar-te per el problema!

Explico las líneas generales de lo que quiero hacer. La mayor parte de mi 
trabajo es analizar datos de estudios ajenos. Hasta ahora lo hacia con SAS y 
tengo una macro  que le paso el nombre del fichero y las variables y la macro 
realiza, según si la variable es cualitativa o cuantitativa (no afino más el 
tipo de variable):
- Descriptiva: 
   - Tabla de frecuencias para variables cualitativas.
   - Variables cuantitativas: estadísticos básicos, listado de los 5 casos 
extremos (máximo y mínimo) y box-plot
- Análisis univariado con variable dependiente cualitativa:
  - Variables independientes cualitativas:
  - Tabla de contingencia con Chi2 i Fisher
  - Odds ratios
  - Variables independientes cuantitativas:
  - Estadísticos básicos según los valores de la variable dependiente.
  - Box-plot para cada categoría de la variable dependiente.
  - Prueba de Kruskal-Wallis
  - Odds ratio
- Análisis univariado con variable dependiente quantitiativa:
  - Variables independientes cualitativas:
  - Estadísticos i bosd plot de la var dependiente para cada categoría de 
la independiente.
  - Test de Kruskal-Wallis.
  - Variables independientes cuantitativas:
  - Regresión lineal simple con los diagramas de dispersión.

Hace de forma "automática" alguna cosa más, pero no quiero cansarte.

Te envío al mail personal dos pdf con dos ejemplos, un análisis descriptivo y 
una univariado como variable dependiente cualitativa.

En R estoy haciendo es enviar a una función el nombre de la tabla de datos, las 
variables que no se han de analizar y el nombre de la variable dependiente si 
se quiere un análisis univariado:

  La función DESUNI llama a la función DES (análisis descriptivo) y UNI 
(análisis univariado). Éstas recorren los nombres de las variables de la tabla 
de datos y según el tipo de variable independiente (numérica o factor) ejecuta 
la función correspondiente. Adjunto al final como ejemplo las funciones DESUNI 
y DES.

Con esto se genera una descriptiva básica y un análisis univariado básico que 
permite conocer las variables del fichero y empezar a comentar con el 
investigador que análisis realizar. El ahorro de tiempo es considerable.

Espero que se me haya entendido y disculpad esta respuesta tan larga.

Gracias por la ayuda y saludos.

=
DESUNI = function(XDADES,
  XDROP=NULL,
  XVD=NULL,
  XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE
  )
  {
  # Camí de les funcions
  XCAMIF="~/sys/utils/apps/r/r_funcions/"
  options(digits = 3, OutDec=",", scipen=999)
  ## No existeix VD: descriptiva
  if(is.null(XVD))   # No existeix VD: descriptiva
{
  cat("\n*** Descriptiva (no existeix variable dependent)\n")
  source(paste(XCAMIF, "des.r", sep=""))
  DES(XDADES=XDADES, XDROP=XDROP, XCAMIF=XCAMIF)
}  
  ## Existeis VD: anàlisi univariat
  else   # Existeis VD: anàlisi univariat
{
  source(paste(XCAMIF, "uni.r", sep=""))
  UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV, XCAMIF=XCAMIF)
}
  }
=
Funció DES:
DES = function(XDADES,  XDROP=NULL, XCAMIF)
  {
ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ])
attach(DADES_S, warn.conflicts = F)
XVARLLI=names(DADES_S)
for (XVARNOM in names(DADES_S))
  {
if(is.numeric(get(XVARNOM)))
  {
source(paste(XCAMIF, "des_quanti.r", sep=""))
DES_QUANTI (XVARNOM)
  }
else if(is.factor(get(XVARNOM)))
  {
source(paste(XCAMIF, "des_quali.r", sep=""))
DES_QUALI (XVARNOM)
  }
  else
{
  cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")
} 
  }
detach(DADES_S)
  }
=


On Mon, 13 Jul 2015 20:56:59 +0200
Carlos Ortega  wrote:

> Hola,
> 
> ¿Qué tipo de análisis quieres hacer?
> Porque de "fábrica" R ya viene con múltiples funciones para el cálculo de
> diferentes estadísticas descriptivas para todo tipo de variables.
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> El 13 de julio de 2015, 15:33, Griera  escribió:
> 
> > Hola:
> >
> > Con esto del R me da la impresión que avanzo un paso y retrocedo dos!
> >
> > El caso es que tengo una "cascada de funciones", para realizar un análisis
> > descriptivo "automático" en función del tipo de variable. Y en los
> > resultados, en lugar de aparecer el nombre de la variable, aparece el
> > nombre del argument

Re: [R-es] Error sql en función

2015-07-27 Thread Griera-yandex
Hola Carlos:

Gracias por responder!

Ayer caí en esta página al buscar el problema con google, pero no conseguir 
entender y implementar lo que sugiere. Sin entender nada, lo que hice fue:


> library(MASS)
> library (sqldf)  # Per SQL
> data(Aids2, package="MASS")
> SQL_PROVA = function (XDADES, XWHE)
+   {
+   XDADES_SQL = sqldf ("select * from $XDADES $XWHE")
+   return(XDADES_SQL)
+   }
> DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: near "$XDADES": syntax error


Evidentemente da error.

Tampoco funcionaba si introducía \"age\" en el agumento del where:


> DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where \"age\" < '40'")
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: near "$XDADES": syntax error


He buscado ejemplos con google. pero no he encontrado nada.

Gracias y saludos.


On Mon, 27 Jul 2015 12:45:50 +0200
Carlos Ortega  wrote:

> Hola,
> 
> Mira la página de "sqldf" en GitHub, viene un ejemplo, entre otras muchas
> cosas, que lo explica:
> 
> https://github.com/ggrothendieck/sqldf#Example_5._Insert_Variables
> 
> #--
> # 5
> minSL <- 7
> limit <- 3
> fn$sqldf('select * from iris where "Sepal.Length" > $minSL limit $limit')
> #--
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> 2015-07-27 12:00 GMT+02:00 Griera :
> 
> > Hola:
> >
> > No consigo que la función sqldf () funcione dentro de una función. Alguien
> > puede echarme una mano. En resumen, el problema es que cuando lo ejecuto
> > fuera de una función no tengo ningún problema:
> >
> > ==
> > > # install.packages("sqldf")
> > > library(MASS)
> > > library (sqldf)
> > > data(Aids2, package="MASS")
> > > options(digits=3)
> >
> > > table (Aids2$state)
> >   NSW Other   QLD   VIC
> >  1780   249   226   588
> >
> > > max (Aids2$age)
> > [1] 82
> >
> > > # Sin función:
> > > DADES_SEL = sqldf ("select * from Aids2 where state in ('NSW', 'QLD')
> > and age < 40")
> >
> > > table (DADES_SEL$state)
> >   NSW Other   QLD   VIC
> >  1102 0   128 0
> >
> > > max (DADES_SEL$age)
> > [1] 39
> > ==
> >
> > Pero dentro de una función no se como pasarle los argumentos para que
> > funcione:
> >
> > ==
> > > SQL_PROVA = function (XDADES, XWHE)
> > +   {
> > +   XDADES_SQL = sqldf (paste ("select * from", XDADES, XWHE, sep = " "))
> > +   return(XDADES_SQL)
> > +   }
> > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")
> > Error in sqliteSendQuery(con, statement, bind.data) :
> >   error in statement: near "fromc": syntax error
> > ==
> >
> > Alguien puede ayudarme y decir que estoy haciendo mal? El problema debe
> > estar en el "paste" ya que si coloco la orden original funciona:
> >
> > ==
> > > SQL_PROVA = function (XDADES, XWHE)
> > +   {
> > +   XDADES_SQL2 = sqldf ("select * from Aids2 where state in ('NSW',
> > 'QLD') and age < 40")
> > +   return(XDADES_SQL2)
> > +   }
> >
> > > DADES_SEL2 = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")
> >
> > > table (DADES_SEL2$state)
> >   NSW Other   QLD   VIC
> >  1102 0   128 0
> >
> > > max (DADES_SEL2$age)
> > [1] 39
> > ==
> >
> > Muchas gracias y saludos.
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
> 
> 
> -- 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] help

2015-12-02 Thread Griera-yandex
Hola:

Nunca he utilizado el RcmdrPlugin.EZR, pero lo único que he entendido:

- accrual time during which subjects are recruited to the study: tiempo que ja 
durado el reclutamiento de los pacientes.
- Total (accural + follow-up) duration: Duración total del estudio: 
reclutamiento + seguimiento.
- Survival ratio at n year in each group: si miras la función, a este argumento 
le denomina "followup":


PowerHazard = function (enrol, observe, followup, group1, group2, alpha, 
sample,
method, ratio)

Si se ejecuta con los valores:

PowerHazard(2, 8, 6, 0.90, 0.80, 0.05, 20, 2, 1)

El resultado es:

> PowerHazard(2, 8, 6, 0.90, 0.80, 0.05, 20, 2, 1)
Assumptions
P1  0,9
P2  0,8
(Follow-up duration for P1, P2)   6
Enrollment duration   2
Total study duration  8
Alpha  0,05
  two-sided
Sample size
N1   20
N2   20
   
  Estimated
Power 0,157

Parece que "Survival ratio at n year in each group" es (Follow-up duration for 
P1, P2).

Espero que esto te ayude.

Saludos.

On Tue, 1 Dec 2015 18:55:51 +0100
JOSE MARTIN AREVALO  wrote:

> > Hola, estoy utilizando RCommander con el plugin Rcmdrplugin.EZR para 
> > calcular curvas de supervivencia de Kaplan-Meier y luego intento ver la 
> > diferencia mediante el test log rank.
> > 
> > El problema me surge cuando intento calcular el tamaño muestral necesario 
> > para saber si la diferencia entre las curvas es significativa o no. En el 
> > paquete está la opción para hacer este cálculo pero hay varias cosas que no 
> > entiendo a qué se refieren:
> > - Accrual duration
> > - Total (accural + follow-up) duration
> > - Survival ratio at n year in each group (esto es lo que menos  entiendo 
> > porque luego aparece la tasa de supervivencia para cada grupo)
> > 
> > He intentado ver si existe algún manual del paquete, pero parece que el 
> > único que he conseguido está en japonés!!!
> > 
> > ¿Me podéis explicar cómo hacer estos cálculos?
> > 
> > El problema que intento resolver es ver si existe diferencia en cuanto a la 
> > supervivencia entre dos grupos de pacientes con una mismo tipo de cáncer 
> > pero con una localización diferente del tumor. La supervivencia está 
> > calculada por meses.
> 
> Gracias por todo
> 
> 
> JOSE MARTIN AREVALO
> martin_j...@gva.es
> 
> 
> 
> 
>   [[alternative HTML version deleted]]
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Tiempo de vida

2015-12-07 Thread Griera-yandex
Hola:

On Mon, 7 Dec 2015 15:12:24 +0100
Jes__s Para Fern__ndez  wrote:

> Buenas, 
> 
> Como pudeo calcular el tiempo de vida? Os cuento, tengo una serie de 
> cuchillas y quiero ver el consumo de las mismas y he pensado en hacer un 
> estudio por tiempo de vida. No se como hacerlo con R

Has una tabla de datos con 4 columnas:
   
1. Fecha que se empieza a utilizar la cuchilla
2. Fecha de la última revisión de la cuchilla
3. TIEMPO: el tiempo transcurrido entre las dos fechas anteriores
4. ESTADO: estado de la cuchilla cuando se revisó la última vez:
0 = Buen estado
1 = Para tirar

Y utiliza el método kaplan-meier:

library(survival)
KM <- survfit(Surv(DATO$TIEMPO, DATOS$ESTADO) ~ 1)
summary(KM)
plot(KM)

Un ejemplo:

> library(survival)
> AML.KM <- survfit(Surv(aml$time, aml$status) ~ 1)
> summary(AML.KM)
Call: survfit(formula = Surv(aml$time, aml$status) ~ 1)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
5 23   2   0,9130  0,0588   0,80491,000
8 21   2   0,8261  0,0790   0,68480,996
9 19   1   0,7826  0,0860   0,63100,971
   12 18   1   0,7391  0,0916   0,57980,942
   13 17   1   0,6957  0,0959   0,53090,912
   18 14   1   0,6460  0,1011   0,47530,878
   23 13   2   0,5466  0,1073   0,37210,803
   27 11   1   0,4969  0,1084   0,32400,762
   30  9   1   0,4417  0,1095   0,27170,718
   31  8   1   0,3865  0,1089   0,22250,671
   33  7   1   0,3313  0,1064   0,17650,622
   34  6   1   0,2761  0,1020   0,13380,569
   43  5   1   0,2208  0,0954   0,09470,515
   45  4   1   0,1656  0,0860   0,05980,458
   48  2   1   0,0828  0,0727   0,01480,462
> plot(AML.KM)

Dibuja la curva de supervivencia con el intervalo de confianza.

Espero que te sea útil.

Saludos.




> 
> Gracias
> Jes_s
> 
>   [[alternative HTML version deleted]]
> 

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Tiempo de vida

2015-12-07 Thread Griera-yandex
Hola:

On Mon, 7 Dec 2015 16:34:14 +0100
Jesús Para Fernández  wrote:

> Los datos no son de desgaste de cuchilla, sino de consumo de las mismas.
> 
> Por ello tengo los datos de la siguiente forma:
> 
> Unidades cambiadasFecha
> 
> 
> En unidades cambiadas, suele ser una y en fecha el dia que se hizo el cmabio. 

No seria:

TIEMPO: Fecha que se coloca una cuchilla nueva hasta que se cambia.
ESTADO: Siempre 1 (siempre se cambia): no existen censuras.

y un registro para cada cuchilla.

Serviría?

Saludos.

> 
> Con eso no se muy bien como estructurar los datos para hacer el análisis. 
> 
> Gracias
> Jesús 
> 
> 
> 
> > Date: Mon, 7 Dec 2015 16:27:18 +0100
> > From: gri...@yandex.com
> > To: j.para.fernan...@hotmail.com
> > CC: r-help-es@r-project.org
> > Subject: Re: [R-es] Tiempo de vida
> > 
> > Hola:
> > 
> > On Mon, 7 Dec 2015 15:12:24 +0100
> > Jes__s Para Fern__ndez  wrote:
> > 
> > > Buenas, 
> > > 
> > > Como pudeo calcular el tiempo de vida? Os cuento, tengo una serie de 
> > > cuchillas y quiero ver el consumo de las mismas y he pensado en hacer un 
> > > estudio por tiempo de vida. No se como hacerlo con R
> > 
> > Has una tabla de datos con 4 columnas:
> >
> > 1. Fecha que se empieza a utilizar la cuchilla
> > 2. Fecha de la última revisión de la cuchilla
> > 3. TIEMPO: el tiempo transcurrido entre las dos fechas anteriores
> > 4. ESTADO: estado de la cuchilla cuando se revisó la última vez:
> > 0 = Buen estado
> > 1 = Para tirar
> > 
> > Y utiliza el método kaplan-meier:
> > 
> > library(survival)
> > KM <- survfit(Surv(DATO$TIEMPO, DATOS$ESTADO) ~ 1)
> > summary(KM)
> > plot(KM)
> > 
> > Un ejemplo:
> > 
> > > library(survival)
> > > AML.KM <- survfit(Surv(aml$time, aml$status) ~ 1)
> > > summary(AML.KM)
> > Call: survfit(formula = Surv(aml$time, aml$status) ~ 1)
> > 
> >  time n.risk n.event survival std.err lower 95% CI upper 95% CI
> > 5 23   2   0,9130  0,0588   0,80491,000
> > 8 21   2   0,8261  0,0790   0,68480,996
> > 9 19   1   0,7826  0,0860   0,63100,971
> >12 18   1   0,7391  0,0916   0,57980,942
> >13 17   1   0,6957  0,0959   0,53090,912
> >18 14   1   0,6460  0,1011   0,47530,878
> >23 13   2   0,5466  0,1073   0,37210,803
> >27 11   1   0,4969  0,1084   0,32400,762
> >30  9   1   0,4417  0,1095   0,27170,718
> >31  8   1   0,3865  0,1089   0,22250,671
> >33  7   1   0,3313  0,1064   0,17650,622
> >34  6   1   0,2761  0,1020   0,13380,569
> >43  5   1   0,2208  0,0954   0,09470,515
> >45  4   1   0,1656  0,0860   0,05980,458
> >48  2   1   0,0828  0,0727   0,01480,462
> > > plot(AML.KM)
> > 
> > Dibuja la curva de supervivencia con el intervalo de confianza.
> > 
> > Espero que te sea útil.
> > 
> > Saludos.
> > 
> > 
> > 
> > 
> > > 
> > > Gracias
> > > Jes_s
> > > 
> > >   [[alternative HTML version deleted]]
> > > 
> 

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] BioStatFLOSS 3.0

2016-03-19 Thread Griera-yandex
Muchas gracias por este programa!! Muy útil


On Mon, 14 Mar 2016 13:26:58 +
 wrote:

> Hola.
> 
> Os informo de que hemos publicado una nueva versión de BioStatFLOSS.
> Para el que no lo conozca, se trata de una recopilación de software para
> Windows. Es una "colección" de programas de utilidad para la realización
> de estudios estadísticos en general (y bioestadísticos/biomédicos en
> particular) en el que "la estrella" es (of course) R. La principal
> característica es que son versiones portables (no es necesario
> instalarlas), independientes una de otras y con un lanzador común para
> facilitar la tarea de ejecutarlas.
> 
> Para descargarlo, accederemos a la web del Proyecto
> http://www.sergas.es/Saude-publica/BioStatFLOSS?idioma=es y en la
> sección de DESCARGA (a la derecha) elegiremos uno de los mirror (es un
> fichero de 1'7Gb). Una vez realizada dicha descarga (ya sea en el disco
> duro o en una unidad externa de disco o pendrive), se descomprime el
> fichero y ya está listo para usar. Entramos en la carpeta resultante y
> ejecutamos el fichero BioStatFLOSS.EXE.
> 
> 
> NOTAS:
> - La versión de R es la 3.2.4 (publicada hace unos días) e incluye
> RCommander
> - Se pueden "transportar" cualquiera de los programas independientemente
> de los otros (es decir, si sólo nos interesa R, pues copiamos sólo esa
> carpeta -y lanzamos el programa en cuestión con el fichero .BAT
> correspondiente-)
> - Esta nueva versión, además de la -previsible- actualización de
> versiones, incluye un GIS y una versión "online" de R
> - El Lanzador está programado en FreePascal (Lazarus) y el código fuente
> se encuentra en la carpeta BioStatFLOSS
> - Es poco intrusivo con sistemas "protegidos" (no es necesario ser
> Administrador del sistema ni instalar nada en el equipo)
> - Resulta muy cómodo a la hora de utilizarlo para formación (se copia en
> los equipos del aula y está listo para trabajar)
> - Dependiendo del antivirus que tengáis instalado, el proceso de
> descompresión puede requerir de bastante paciencia (son MUCHOS ficheros).
> 
> Cualquier comentario/sugerencia/feedback será bienvenido.
> 
> Un saludo,
> 
> --
> Miguel Ángel Rodríguez Muíños
> Coordinador Proyecto BioStatFLOSS
> Dirección Xeral de Saúde Pública
> Consellería de Sanidade
> Xunta de Galicia
> http://dxsp.sergas.es
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Nota: A información contida nesta mensaxe e os seus posibles documentos 
> adxuntos é privada e confidencial e está dirixida únicamente ó seu 
> destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, 
> por favor elimínea. A distribución ou copia desta mensaxe non está autorizada.
> 
> Nota: La información contenida en este mensaje y sus posibles documentos 
> adjuntos es privada y confidencial y está dirigida únicamente a su 
> destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, 
> por favor elimínelo. La distribución o copia de este mensaje no está 
> autorizada.
> 
> See more languages: http://www.sergas.es/aviso-confidencialidad
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] R sin instalar

2016-03-23 Thread Griera-yandex
Hola:

No se si esto te puede servir: 

 BioStatFLOSS: http://www.sergas.es/Saude-publica/BioStatFLOSS

Saludos.

On Wed, 23 Mar 2016 10:07:53 -0400 (EDT)
merlinva2...@grannet.grm.sld.cu wrote:

> Buenos días,
> 
> Tengo que usar varias máquinas, algunas de las cuales no tienen R
> instalado ni se lo puedo instalar. Alguien sabe si existe una versión de R
> que no exista la necesidad de instalarlo o cómo hacerla.
> Saludos y gracias anticipadas,
> merlin
> 
> 
> --
> Este mensaje le ha llegado mediante el servicio de correo electronico que 
> ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema 
> Nacional de Salud. La persona que envia este correo asume el compromiso de 
> usar el servicio a tales fines y cumplir con las regulaciones establecidas
> 
> Infomed: http://www.sld.cu/
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Alternativa a RStudio

2017-03-23 Thread Griera-yandex
On Wed, 22 Mar 2017 00:35:18 -0300
eric  wrote:

> Hola Javier, yo uso rkward en Debian y funciona 

Yo también es lo que utilizo también en Debian.


> fantastico para mis 
> necesidades, hay una version para windows en su pagina
> 
> https://rkward.kde.org/RKWard_on_Windows
> 
> nunca lo he usado en win, pero imagino que debe ser lo mismo, un entorno 
> simple con botones y menus que facilitan las tareas.
> 
> Eso.
> 
> Saludos,
> 
> Eric.
> 
> 
> 
> 
> 
> 
> On 03/21/2017 07:48 PM, javier.ruben.marcu...@gmail.com wrote:
> > Estimados
> >
> > Alguno utiliza una alternativa a RStudio, últimamente no me gusta como 
> > funciona, por ejemplo, al cargar una archivo (abrirlo) se coloca como a 
> > ejecutar algo, la consola no marca nada, pero pasa el tiempo y el 
> > administrador de tareas de Windows 10 informa como va aumentando los megas 
> > de ram que consume, y aparecen mensajes de JavaScript en algunas 
> > oportunidades (lo instale otra vez a ver que pasa, pero el consumo de 
> > memoria es “malo y no permite ejecutar nada”)
> >
> >
> > Javier Rubén Marcuzzi
> >
> >
> > [[alternative HTML version deleted]]
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> 
> -- 
> Forest Engineer
> Master in Environmental and Natural Resource Economics
> Ph.D. student in Sciences of Natural Resources at La Frontera University
> Member in AguaDeTemu2030, citizen movement for Temuco with green city 
> standards for living
> 
> Nota: Las tildes se han omitido para asegurar compatibilidad con algunos 
> lectores de correo.
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

[R-es] Transformación (logarítmica) de varias variables

2017-11-20 Thread Griera-yandex
Hola, buenos días:

Habitualmente transformo varias variables mediante la función lapply de la 
forma siguiente:

---
library (MASS); data(Aids2, package = "MASS");DADES<-Aids2
detach ("package:MASS", unload<-TRUE)
LN <- function (X) {
   X <- log (X)
   X
}
XVARL <- c ("diag", "death")
DADES [XVARL] <- lapply(DADES [XVARL], LN)
---

El problema con este código es que pierdo la variable original. Intento cambiar 
la variable original (añadiendo el sufijo «_LN» al nombre original) mediante el 
código:

---
LN <- function (X) {
   X <- log (X)
   X
}
XVARL <- c ("diag", "death")
DADES [[paste (deparse (substitute (XVARL)), "_LN", sep = "")]] <- lapply(DADES 
[XVARL], LN)
---

que, evidentemente, no funciona (el código es fruto de una importante empanada 
mental con R):

---
> DADES [[paste (deparse (substitute (XVARL)), "_LN", sep = "")]] <- 
> lapply(DADES [XVARL], LN) 
Error in `[[<-.data.frame`(`*tmp*`, paste(deparse(substitute(XVARL)), : 
replacement has 2 rows, data has 2843
---

Alguien me podría echar una mano para poder transformar las variables sin 
perder las originales. De momento lo hago creándolas previamente. Pero buscaba 
una forma de ahorrármelo.

Muchas gracias y saludos. Griera.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Transformación (logarítmica) de varias variables

2017-11-20 Thread Griera-yandex
Hola:

Me contesto a mi mismo con una posible solución:

---
library (MASS); data(Aids2, package = "MASS");DADES<-Aids2
detach ("package:MASS", unload<-TRUE)
LN <- function (X) {
X <- log (X)
X
}
XVARL  = c ("diag","death")
XVARLf = paste(XVARL, "_LN", sep = "")  # 
https://stackoverflow.com/questions/14872081/adding-a-prefix-to-column-names
DADES [XVARLf] <- c (lapply(DADES [XVARL], LN))
str (DADES)
---

Igual existe una solución mejor, pero esta parece funcionar.

Muchas gracias y saludos. Griera.

On Mon, 20 Nov 2017 12:46:11 +0100
Griera-yandex  wrote:

> Hola, buenos días:
> 
> Habitualmente transformo varias variables mediante la función lapply de la 
> forma siguiente:
> 
> ---
> library (MASS); data(Aids2, package = "MASS");DADES<-Aids2
> detach ("package:MASS", unload<-TRUE)
> LN <- function (X) {
>X <- log (X)
>X
> }
> XVARL <- c ("diag", "death")
> DADES [XVARL] <- lapply(DADES [XVARL], LN)
> ---
> 
> El problema con este código es que pierdo la variable original. Intento 
> cambiar la variable original (añadiendo el sufijo «_LN» al nombre original) 
> mediante el código:
> 
> ---
> LN <- function (X) {
>X <- log (X)
>X
> }
> XVARL <- c ("diag", "death")
> DADES [[paste (deparse (substitute (XVARL)), "_LN", sep = "")]] <- 
> lapply(DADES [XVARL], LN)
> ---
> 
> que, evidentemente, no funciona (el código es fruto de una importante 
> empanada mental con R):
> 
> ---
> > DADES [[paste (deparse (substitute (XVARL)), "_LN", sep = "")]] <- 
> > lapply(DADES [XVARL], LN)   
> Error in `[[<-.data.frame`(`*tmp*`, paste(deparse(substitute(XVARL)), : 
> replacement has 2 rows, data has 2843
> ---
> 
> Alguien me podría echar una mano para poder transformar las variables sin 
> perder las originales. De momento lo hago creándolas previamente. Pero 
> buscaba una forma de ahorrármelo.
> 
> Muchas gracias y saludos. Griera.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] rseek 2?

2018-06-05 Thread Griera-yandex
Hola Javier:

Acabo de realizar la consulta:

   survival recurrent events 

Y me salen: "About 1,400,000 results (0.52 seconds)"

Yo diría que funciona. Lo del logo RSeek² no lo recuerdo.

Saludos.


On Mon, 4 Jun 2018 11:54:44 -0300
Javier Marcuzzi  wrote:

> Estimados
> 
> Estoy realizando una referencia y veo que rseek antes me daba una cantidad
> de resultados a la consulta, hoy la cantidad de resultados es menor, pero
> dice en el logo rseek2.
> 
> ¿Cambió el algoritmo?, ¿es diferente?, ¿se puede acceder al anterior?
> 
> ¿Alguno sabe que paso? El dato importante para conocer es la cantidad de
> resultados que da ante determinada palabra, pero esto me cambio (en números
> grandes).
> 
> Javier Rubén Marcuzzi
> 
>   [[alternative HTML version deleted]]
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] BioStatFLOSS 4.0

2019-01-29 Thread Griera-yandex
Gracias por el esfuerzo! 


On Tue, 29 Jan 2019 09:56:59 +
 wrote:

> Hola.
> 
> Os informo de que hemos publicado una nueva versi_n (la 4) de BioStatFLOSS.
> 
> Para el que no lo conozca, se trata de una recopilaci_n de software para 
> Windows. Es una "colecci_n" de programas de utilidad para la realizaci_n de 
> estudios estad_sticos en general (y bioestad_sticos/biom_dicos en particular) 
> en el que "la estrella" es (of course) R. La principal caracter_stica es que 
> son versiones portables (no es necesario instalarlas por lo que no son 
> "agresivas" con el sistema), independientes una de otras y con un lanzador 
> com_n para facilitar la tarea de ejecutarlas.
> 
> Para descargarlo, accederemos a la web del Proyecto 
> http://www.sergas.es/Saude-publica/BioStatFLOSS?idioma=es y en la secci_n de 
> DESCARGA (a la derecha) elegiremos uno de los mirror (es un fichero de 
> 2'6Gb). Una vez realizada dicha descarga (ya sea en el disco duro o en una 
> unidad externa de disco o pendrive), se descomprime el fichero y ya est_ 
> listo para usar. Entramos en la carpeta resultante y ejecutamos el fichero 
> BioStatFLOSS.EXE.
> 
> 
> NOTAS:
> - La versi_n de R es la 3.5.2 e incluye RCommander.
> - Se puede "transportar" cualquiera de los programas independientemente de 
> los otros (es decir, si s_lo nos interesa R, pues copiamos s_lo esa carpeta 
> -y lanzamos el programa en cuesti_n con el fichero .BAT correspondiente-).
> - El Lanzador est_ programado en FreePascal (Lazarus) y el c_digo fuentese 
> encuentra en la carpeta BioStatFLOSS.
> - Es poco intrusivo con sistemas "protegidos" (no es necesario ser 
> Administrador del sistema ni instalar nada en el equipo).
> - Resulta muy c_modo a la hora de utilizarlo para formaci_n (se copia en los 
> equipos del aula, o se entrega en un pendrive, y est_ listo para trabajar).
> - Dependiendo del antivirus que teng_is instalado, el proceso de 
> descompresi_n puede requerir de bastante paciencia (son MUCHOS ficheros).
> 
> Es de agradecer cualquier comentario/sugerencia/feedback.
> 
> 
> Pd.- Gracias a la Asociaci_n MELISA por su colaboraci_n 
> (https://www.melisa.gal/)
> 
> 
> Un Saludo,
> --
> Miguel _ngel Rodr_guez Mu__os
> Coordinador del Proyecto BioStatFLOSS
> Direcci_n Xeral de Sa_de P_blica
> Conseller_a de Sanidade
> Xunta de Galicia
> http://dxsp.sergas.es
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Nota: A informaci_n contida nesta mensaxe e os seus posibles documentos 
> adxuntos _ privada e confidencial e est_ dirixida _nicamente _ seu 
> destinatario/a. Se vostede non _ o/a destinatario/a orixinal desta mensaxe, 
> por favor elim_nea. A distribuci_n ou copia desta mensaxe non est_ autorizada.
> 
> Nota: La informaci_n contenida en este mensaje y sus posibles documentos 
> adjuntos es privada y confidencial y est_ dirigida _nicamente a su 
> destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, 
> por favor elim_nelo. La distribuci_n o copia de este mensaje no est_ 
> autorizada.
> 
> See more languages: http://www.sergas.es/aviso-confidencialidad
> 
>   [[alternative HTML version deleted]]
>

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Gráfico tiempos de supervivencia

2019-07-18 Thread Griera-yandex
Buenos días a todos:

Alguien me puede ayudar a hacer (si se puede) con unos datos similares a:

set.seed(20)
DATOS <- data.frame (
  ID  = c (1:10)
, TIEMPO  = sample(1:40, 10, replace=F)
, DEF = sample(0:1, 10, replace=T)
);DATOS

un gráfico que muestre los tiempos de supervivencia similar a:
https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png

Lo he intentado con la función followup.plot del paquete
"epiDisplay" (https://cran.r-project.org/web/packages/epiDisplay/index.html),
pero no encuentro la forma.

Muchas gracias y saludos. 

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Gráfico tiempos de supervivencia

2019-07-18 Thread Griera-yandex
Hola Pedro:

Gracias por la ayuda. No conocía esta manera más elegante de mostrar las curvas 
de Kaplan-Meier. Te la compro.

En realidad quería mostrar un gráfico con la longitud de les tiempos de 
seguimiento y al final un símbolo para indicar el estado. Seria un gráfico 
similar a:

https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png

Pero no encuentro la manera de hacerlo. Igual no se puede.

Muchas gracias y saludos.

On Thu, 18 Jul 2019 10:28:37 +
PEDRO CONCEJERO CEREZO  wrote:

> Hola, te vale esto? Es forma estandar de representar graficos supervivencia
> 
> Basado en esto:
> 
> https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/
> 
> set.seed(20)
> 
> DATOS <- data.frame (
>   ID  = c (1:10)
>   , TIEMPO  = sample(1:40, 10, replace=F)
>   , DEF = sample(0:1, 10, replace=T)
> )
> 
> DATOS
> 
> library(survival)
> 
> DATOS$DEF <- as.numeric(DATOS$DEF)
> DATOS$TIEMPO <- as.numeric(DATOS$TIEMPO)
> 
> s <- Surv(DATOS$TIEMPO, DATOS$DEF)
> head(s)
> 
> ## Kaplan-Meier estimator.
> km <- survfit(s ~ 1,
>   data = DATOS,
>   conf.type = "log-log")
> 
> ## Show object
> km
> 
> summary(km)
> 
> plot(km)
> 
> # Instala las librerías necesarias:
> library(ranger)
> library(ggplot2)
> library(dplyr)
> library(ggfortify)
> 
> autoplot(km)
> 
> 
> El 18/07/2019 a las 12:00, 
> r-help-es-requ...@r-project.org<mailto:r-help-es-requ...@r-project.org> 
> escribió:
> 
> Envíe los mensajes para la lista R-help-es a
> r-help-es@r-project.org<mailto:r-help-es@r-project.org>
> 
> Para subscribirse o anular su subscripción a través de la WEB
> https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
> 
> r-help-es-requ...@r-project.org<mailto:r-help-es-requ...@r-project.org>
> 
> Puede contactar con el responsable de la lista escribiendo a:
> r-help-es-ow...@r-project.org<mailto:r-help-es-ow...@r-project.org>
> 
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
> 
> 
> Asuntos del día:
> 
>1. Gráfico tiempos de supervivencia (Griera-yandex)
> 
> --
> 
> Message: 1
> Date: Thu, 18 Jul 2019 10:18:42 +0200
> From: Griera-yandex <mailto:gri...@yandex.com>
> To: Lista R <mailto:r-help-es@r-project.org>
> Subject: [R-es] Gráfico tiempos de supervivencia
> Message-ID: <20190718101842.280414d5@debian-dde>
> Content-Type: text/plain; charset="utf-8"
> 
> Buenos días a todos:
> 
> Alguien me puede ayudar a hacer (si se puede) con unos datos similares a:
> 
> set.seed(20)
> DATOS <- data.frame (
>   ID  = c (1:10)
> , TIEMPO  = sample(1:40, 10, replace=F)
> , DEF = sample(0:1, 10, replace=T)
> );DATOS
> 
> un gráfico que muestre los tiempos de supervivencia similar a:
> https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png
> 
> Lo he intentado con la función followup.plot del paquete
> "epiDisplay" (https://cran.r-project.org/web/packages/epiDisplay/index.html),
> pero no encuentro la forma.
> 
> Muchas gracias y saludos.
> 
> 
> 
> 
> --
> 
> Subject: Pié de página del digest
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org<mailto:R-help-es@r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> 
> --
> 
> Fin de Resumen de R-help-es, Vol 125, Envío 7
> *
> 
> 
> --
> Pedro Concejero
> Telefónica CDO - 4th Platform - Internal Use Cases
> E-mail: 
> pedro.concejerocer...@telefonica.com<mailto:pedro.concejerocer...@telefonica.com>
> skype: pedro.concejero
> twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro>
> linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es>
> eRReRo feliz, me puedes encontrar en gRupo R madRid 
> <http://madrid.r-es.org/?s=concejero&searchsubmit.x=21&searchsubmit.y=13>
> 
> 
> 
> Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario, 
> puede contener información privilegiada o

Re: [R-es] Gráfico tiempos de supervivencia

2019-07-18 Thread Griera-yandex
Hola Carlos:

Como siempre, perfecta esta solución! Es lo que necesitaba.

Muchas gracias por esta ayuda y por el tiempo dedicado.

Saludos

On Thu, 18 Jul 2019 14:21:24 +0200
Carlos Ortega  wrote:

> Hola,
> 
> Sí, lo puedes hacer de esta forma...
> 
> #-
> set.seed(20)
> DATOS <- data.frame (
> ID  = c (1:10)
>   , TIEMPO  = sample(1:40, 10, replace=F)
>   , DEF = as.factor(sample(c(0,1), 10, replace=T))
> )
> 
> library(ggplot2)
> 
>   ggplot( data = DATOS ) +
>geom_point( aes(x = TIEMPO, y = ID , shape = DEF, color = DEF), size = 5
> ) +
>geom_segment( aes( x = 0, y = ID,  xend = TIEMPO, yend = ID ) ) +
> guides(colour = FALSE) +
> labs(shape = 'LEGEND') +
> scale_y_discrete() +
>theme_minimal()
> #-
> 
> E incluso puedes reproducirlo usando fuentes parecidas a la de los comics
> con el paquete "xkcd".
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> 
> El jue., 18 jul. 2019 a las 13:05, Griera-yandex ()
> escribió:
> 
> > Hola Pedro:
> >
> > Gracias por la ayuda. No conocía esta manera más elegante de mostrar las
> > curvas de Kaplan-Meier. Te la compro.
> >
> > En realidad quería mostrar un gráfico con la longitud de les tiempos de
> > seguimiento y al final un símbolo para indicar el estado. Seria un gráfico
> > similar a:
> >
> > https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png
> >
> > Pero no encuentro la manera de hacerlo. Igual no se puede.
> >
> > Muchas gracias y saludos.
> >
> > On Thu, 18 Jul 2019 10:28:37 +
> > PEDRO CONCEJERO CEREZO  wrote:
> >
> > > Hola, te vale esto? Es forma estandar de representar graficos
> > supervivencia
> > >
> > > Basado en esto:
> > >
> > > https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/
> > >
> > > set.seed(20)
> > >
> > > DATOS <- data.frame (
> > >   ID  = c (1:10)
> > >   , TIEMPO  = sample(1:40, 10, replace=F)
> > >   , DEF = sample(0:1, 10, replace=T)
> > > )
> > >
> > > DATOS
> > >
> > > library(survival)
> > >
> > > DATOS$DEF <- as.numeric(DATOS$DEF)
> > > DATOS$TIEMPO <- as.numeric(DATOS$TIEMPO)
> > >
> > > s <- Surv(DATOS$TIEMPO, DATOS$DEF)
> > > head(s)
> > >
> > > ## Kaplan-Meier estimator.
> > > km <- survfit(s ~ 1,
> > >   data = DATOS,
> > >   conf.type = "log-log")
> > >
> > > ## Show object
> > > km
> > >
> > > summary(km)
> > >
> > > plot(km)
> > >
> > > # Instala las librerías necesarias:
> > > library(ranger)
> > > library(ggplot2)
> > > library(dplyr)
> > > library(ggfortify)
> > >
> > > autoplot(km)
> > >
> > >
> > > El 18/07/2019 a las 12:00, r-help-es-requ...@r-project.org > r-help-es-requ...@r-project.org> escribió:
> > >
> > > Envíe los mensajes para la lista R-help-es a
> > > r-help-es@r-project.org<mailto:r-help-es@r-project.org>
> > >
> > > Para subscribirse o anular su subscripción a través de la WEB
> > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > >
> > > O por correo electrónico, enviando un mensaje con el texto "help" en
> > > el asunto (subject) o en el cuerpo a:
> > > r-help-es-requ...@r-project.org > r-help-es-requ...@r-project.org>
> > >
> > > Puede contactar con el responsable de la lista escribiendo a:
> > > r-help-es-ow...@r-project.org > r-help-es-ow...@r-project.org>
> > >
> > > Si responde a algún contenido de este mensaje, por favor, edite la
> > > linea del asunto (subject) para que el texto sea mas especifico que:
> > > "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> > > la respuesta sólo aquellas partes del mensaje a las que está
> > > respondiendo.
> > >
> > >
> > > Asuntos del día:
> > >
> > >1. Gráfico tiempos de supervivencia (Griera-yandex)
> > >
> > > --
> > >
> > > Message: 1
> > > Date: Thu, 18 Jul 2019 10:18:42 +0200
> > > From: Griera-yandex <mailto:gri...@yandex.com>
> > > To: 

[R-es] Transformar caracter con Año-Num semana del año a fecha

2021-01-09 Thread Griera-yandex
Hola a todos:

A ver si alguien me puede ayudar a leer los archivos Covid del European Centre 
for Disease Prevention and Control:

https://www.ecdc.europa.eu/en/publications-data/data-national-14-day-notification-rate-covid-19

Ahora la fecha está como año y número de semana en formato ISO. Por ejemplo:

"2020-01" (1a semana del 2020)
"2020-02" (2a semana del 2020).
"2020-53" (última semana del 2020).

Intento transformarla como una fecha, pero siempre devuelve el "2020-01-09":

as.Date ("2020-01", "%Y-%W")# [1] "2020-01-09"
as.Date ("2020-02", "%Y-%W")# [1] "2020-01-09"
as.Date ("2020-03", "%Y-%W")# [1] "2020-01-09"
as.Date ("2020-53", "%Y-%W")# [1] "2020-01-09"

Si le añado el día de la semana, lo hace bien hasta el "2020-53":

as.Date (paste0 ("2020-01", "-1"), "%Y-%W-%w")  # [1] "2020-01-06
as.Date (paste0 ("2020-52", "-1"), "%Y-%W-%w")  # [1] "2020-12-28"
as.Date (paste0 ("2020-53", "-1"), "%Y-%W-%w")  # [1] NA

Para "2020-53" da el error: In strptime(x, format, tz = "GMT") :
  (0-based) yday 369 in year 2020 is invalid

Alguien me pude decir como solucionarlo?

Muchas gracias y saludos.

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Transformar caracter con Año-Num semana del año a fecha

2021-01-09 Thread Griera-yandex
Muchas gracies, Juan. 

Funciona a la perfección:

DADES_UE$year_week = ISOweek2date (paste0 
(str_replace(year_week,"-","-W"),"-1"))

Salud!

On Sat, 9 Jan 2021 22:30:52 + (UTC)
jose luis  wrote:

>  HolaOtra forma. 
> Tras convertir la fecha en factor y separarla en año y semana con "separate", 
> volvemos a unir año y semana.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> En sábado, 9 de enero de 2021 18:05:50 CET, JCMld 
>  escribió:  
>  
>  El problema es que parece que hay un desfase de 1 semana y empieza
> devolviéndote la fecha del primer lunes del año como la de la primera semana
> y en realidad es de la segunda.
> 
> Una posible solución sería utilizar el paquete ISOweek. Por ejemplo,
> suponiendo que el archivo descargado está en el directorio de trabajo y que
> se llama "convid.csv" sería algo así:
> 
> library(ISOweek)
> library(stringr)
> 
> a<-read.csv("covid.csv")
> a$fecha<-ISOweek2date(paste0(str_replace(a$year_week,"-","-W"),"-1"))
> 
> Esta función requiere que el formato sea del estilo "2020-W01-1", por eso
> previamente sustituyo el "-" por "-W".
> 
> Al concatenarle el "-1" significa que te devolverá siempre la fecha del
> primer día de la semana, o sea, del lunes. Esto significa que para la
> primera semana del 2020 te va a devolver la fecha "2019-12-30", ya que el
> año empezó en miércoles. Y para la semana 53, te devuelve 2020-12-28.
> 
> La librería stringr es necesaria para el str_replace.
> 
> Espero te ayude.
> 
> Saludos,
> Juan
> 
> 
> 
> 
> -Mensaje original-
> De: R-help-es  En nombre de Griera-yandex
> Enviado el: sábado, 9 de enero de 2021 16:27
> Para: r-help-es@r-project.org
> Asunto: [R-es] Transformar caracter con Año-Num semana del año a fecha
> 
> Hola a todos:
> 
> A ver si alguien me puede ayudar a leer los archivos Covid del European
> Centre for Disease Prevention and Control:
> 
> https://www.ecdc.europa.eu/en/publications-data/data-national-14-day-notific
> ation-rate-covid-19
> 
> Ahora la fecha está como año y número de semana en formato ISO. Por ejemplo:
> 
> "2020-01" (1a semana del 2020)
> "2020-02" (2a semana del 2020).
> "2020-53" (última semana del 2020).
> 
> Intento transformarla como una fecha, pero siempre devuelve el "2020-01-09":
> 
> as.Date ("2020-01", "%Y-%W")            # [1] "2020-01-09"
> as.Date ("2020-02", "%Y-%W")            # [1] "2020-01-09"
> as.Date ("2020-03", "%Y-%W")            # [1] "2020-01-09"
> as.Date ("2020-53", "%Y-%W")            # [1] "2020-01-09"
> 
> Si le añado el día de la semana, lo hace bien hasta el "2020-53":
> 
> as.Date (paste0 ("2020-01", "-1"), "%Y-%W-%w")        # [1] "2020-01-06
> as.Date (paste0 ("2020-52", "-1"), "%Y-%W-%w")        # [1] "2020-12-28"
> as.Date (paste0 ("2020-53", "-1"), "%Y-%W-%w")        # [1] NA
> 
> Para "2020-53" da el error: In strptime(x, format, tz = "GMT") :
>   (0-based) yday 369 in year 2020 is invalid
> 
> Alguien me pude decir como solucionarlo?
> 
> Muchas gracias y saludos.
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>   

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Bucle de regresiones

2021-11-15 Thread Griera-yandex
Hola, buenos dias:

Estoy intentando hacer una serie de regresiones en las que la "y" y una de las 
"x", son diferentes en cada regresión. Además, hay unos predictores constantes. 
Un ejemplo seria de los datos seria:

N <- 100

# x1, y1
set.seed(1234)
x1 <- sample(1:100, N, replace <- TRUE)
mean(x1);sd(x1)
y1 <- x1 + 2 + 1.5*rnorm(length(x1))

# x2, y2
set.seed(5678)
x2 <- 1:N
x2 <- sample(1:100, N, replace <- TRUE)
mean(x2);sd(x2)
y2 <- x2 + 2 + 1.5*rnorm(length(x2))

df <- data.frame (Y1 <- y1
, Y2 <- y2
, X1 <- x1
, X2 <- x2
, SE <- factor(rbinom(N, 1, .5))
, ED <- sample(20:50, N, replace <- TRUE)
)

Intento hacer dos bucles para cambiar la "y" y las "x":

YL <- c ("Y1", "Y2")
XL <- c ("X1", "X2")
for (Y in YL)
{
for (X in XL)
{
cat ("Y:", Y, "X:", X, "\n")
print (summary (lm (Y ~ X + SE + ED, data <- 
df)))
}
}

Pero al ejecutarlo, da el error:

Error in model.frame.default(formula = Y ~ X + SE + ED, data = df, 
drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'SE')

Parece como si no entendiera que la Y es "Y1" y la X es "X1" de df. 

¿Alguna ayuda de como se puedes solucionas?

Muchas gracias a todos!

 

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Bucle de regresiones

2021-11-15 Thread Griera-yandex
Hola:

Sí, muchas gracias! Funciona. Aunque no entiendo como en el bucle original no 
coge el contenido de X1 si en la fórmula aparece "X1". Son cosas que me cuesta 
entender de R. Que le vamos ha hacer!

Gracias de nuevo y saludos.


On Mon, 15 Nov 2021 13:57:51 +0100
Proyecto R-UCA  wrote:

> Buenas,
> 
> En el bucle estás asignando a la variable X el valor "X1" y no el
> contenido de la variable X.
> 
> A ver si esto te sirve:
> 
> for (Y in 1:2)
> {
> for (X in 3:4)
> {
> cat ("Y:", names(df)[Y], "X:", names(df)[X], "\n")
> print (summary (lm (df[,Y] ~ df[,X] + SE + ED,
>     data <- df)))
> }
> }
> 
> Un saludo.
> 
> El lun, 15-11-2021 a las 13:20 +0100, Griera-yandex escribió:
> > Hola, buenos dias:
> > 
> > Estoy intentando hacer una serie de regresiones en las que la "y" y una
> > de las "x", son diferentes en cada regresión. Además, hay unos
> > predictores constantes. Un ejemplo seria de los datos seria:
> > 
> > N <- 100
> > 
> > # x1, y1
> > set.seed(1234)
> > x1 <- sample(1:100, N, replace <- TRUE)
> > mean(x1);sd(x1)
> > y1 <- x1 + 2 + 1.5*rnorm(length(x1))
> > 
> > # x2, y2
> > set.seed(5678)
> > x2 <- 1:N
> > x2 <- sample(1:100, N, replace <- TRUE)
> > mean(x2);sd(x2)
> > y2 <- x2 + 2 + 1.5*rnorm(length(x2))
> > 
> > df <- data.frame (Y1 <- y1
> > , Y2 <- y2
> > , X1 <- x1
> > , X2 <- x2
> > , SE <- factor(rbinom(N, 1, .5))
> > , ED <- sample(20:50, N, replace <- TRUE)
> > )
> > 
> > Intento hacer dos bucles para cambiar la "y" y las "x":
> > 
> > YL <- c ("Y1", "Y2")
> > XL <- c ("X1", "X2")
> > for (Y in YL)
> > {
> > for (X in XL)
> > {
> > cat ("Y:", Y, "X:", X, "\n")
> > print (summary (lm (Y ~ X + SE + ED,
> > data <- df)))
> > }
> > }
> > 
> > Pero al ejecutarlo, da el error:
> > 
> > Error in model.frame.default(formula = Y ~ X + SE + ED, data = df,
> > drop.unused.levels = TRUE) : 
> >   variable lengths differ (found for 'SE')
> > 
> > Parece como si no entendiera que la Y es "Y1" y la X es "X1" de df. 
> > 
> > ¿Alguna ayuda de como se puedes solucionas?
> > 
> > Muchas gracias a todos!
> > 
> >  
> > 
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar nombre variable regresión

2021-11-18 Thread Griera-yandex
Hola:

Gracias por la respuesta. Disculpa, el ejemplo está mal planteado. En realidad 
seria:

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)

df <- data.frame (weight = weight, group = group)
rm(ctl, trt, group, weight) ## Ya que la regresión se ejecutaria, por ejemplo, 
dentro de otro espacio y estos objetos no estarian accesibles

Si quiero que la variable independiente sea una "variable", y hago:

> X = "group"
> X 
[1] "group"
> lm.D9 <- lm(weight ~ X)
Error in eval(predvars, data, env) : object 'weight' not found
¿No hay forma de que entienda que "X" es el nombre de la variable
independiente "group", que no sea pasar la posición de la variable?

Muchas gracias y saludos.


On Thu, 18 Nov 2021 08:35:35 -0300
MAURICIO MARDONES  wrote:

> Creo que es por simplemente las comillas en “group”
> 
> Saca las comillas. Asigna así e intenta
> 
> X = group
> 
> Slds
> 
> > On 18-11-2021, at 08:03, Griera  wrote:
> > 
> > Hola, buenos días:
> > 
> > No es un problema concreto que tenga ahora, pero es un problema general
> > que no se si tiene solución fácil. Hago una regresión (de lm.html):
> > 
> > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > weight <- c(ctl, trt)
> > lm.D9 <- lm(weight ~ group)
> > 
> > Si quiero que la variable independiente sea una "variable", y hago:
> > 
> > X = "group"
> > lm.D9 <- lm(weight ~ X)
> > 
> > Y da el error: Error in model.frame.default(formula = XVD ~ group, 
> > drop.unused.levels = TRUE) : 
> >  variable lengths differ (found for 'group')
> > 
> > Ya que, como me decían el otro día "estás asignando a la variable X el 
> > valor "X" y no el
> > contenido de la variable X."
> > 
> > ¿No hay forma de que entienda que "X" es el nombre de la variable 
> > independiente "group", que no sea pasar la posición de la variable?
> > 
> > Muchas gracias y saludos a todos.
> > 
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> 
> -- 
> C*ertificación ISO 9001/2015*: Sistema de Datos Biológico-Pesqueros (Arica, 
> Iquique, Coquimbo, Valparaíso, San Antonio, Talcahuano y Calbuco, 
> pesquerías industriales y artesanales)

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar nombre variable regresión

2021-11-18 Thread Griera-yandex
Sí! Gracias por responder!

Funciona sin problema:

> X = "group"
+ X 
[1] "group"
+ lm.D9 <- lm(weight ~ get (X), data = df)
+ summary (lm.D9)

Call:
lm(formula = weight ~ get(X), data = df)

Residuals:
Min  1Q  Median  3Q Max 
-1,0710 -0,4937  0,0685  0,2462  1,3690 

Coefficients:
Estimate Std. Error t value   Pr(>|t|)
(Intercept)5,032  0,220   22,85 0,0095 ***
get(X)Trt -0,371  0,311   -1,19   0,25
---
Signif. codes:  0 ‘***’ 0,001 ‘**’ 0,01 ‘*’ 0,05 ‘.’ 0,1 ‘ ’ 1

Residual standard error: 0,696 on 18 degrees of freedom
Multiple R-squared:  0,0731,Adjusted R-squared:  0,0216 
F-statistic: 1,42 on 1 and 18 DF,  p-value: 0,249

Gracias!

On Thu, 18 Nov 2021 13:01:26 +0100
Marcelino de la Cruz Rot  wrote:

> Hola:
> Creo que lo que quieres es esto:
> 
> lm.D9 <- lm(weight ~ get(X))
> 
> Saludos,
> 
> Marcelino
> 
> 
> El 18/11/2021 a las 12:03, Griera escribió:
> > Hola, buenos días:
> >
> > No es un problema concreto que tenga ahora, pero es un problema general
> > que no se si tiene solución fácil. Hago una regresión (de lm.html):
> >
> > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > weight <- c(ctl, trt)
> > lm.D9 <- lm(weight ~ group)
> >
> > Si quiero que la variable independiente sea una "variable", y hago:
> >
> > X = "group"
> > lm.D9 <- lm(weight ~ X)
> >
> > Y da el error: Error in model.frame.default(formula = XVD ~ group, 
> > drop.unused.levels = TRUE) :
> >variable lengths differ (found for 'group')
> >
> > Ya que, como me decían el otro día "estás asignando a la variable X el 
> > valor "X" y no el
> > contenido de la variable X."
> >
> > ¿No hay forma de que entienda que "X" es el nombre de la variable 
> > independiente "group", que no sea pasar la posición de la variable?
> >
> > Muchas gracias y saludos a todos.
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > .
> 
> 
> -- 
> Marcelino de la Cruz Rot
> Depto. de Biología y Geología
> Física y Química Inorgánica
> Universidad Rey Juan Carlos
> Móstoles España
> 

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar nombre variable regresión

2021-11-18 Thread Griera-yandex
Gracias por la respuesta!

El código tuyo funciona sin problema, pero cuando lo "adapto" me da error:

> ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
+ trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
+ group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
+ weight <- c(ctl, trt)
+ df <- data.frame (weight = weight, group = group)
+ rm(ctl, trt, group, weight)   ## Ya que la regresión se ejecutaria, 
por ejemplo, dentro de otro espacio y estos objetos no estarian accesibles
+ model <- "df$weight ~ df$group"
+ summary (lm(model))
Error in df$weight : object of type 'closure' is not subsettable

Que estoy haciendo mal?

Muchas gracias y saludos!


On Thu, 18 Nov 2021 13:12:43 +0100
Proyecto R-UCA  wrote:

> Buenas,
> 
> a ver si esto te sirve:
> ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> weight <- c(ctl, trt)
> dd <- data.frame(weight = weight, group = group, ctl = ctl, trt=trt)
> model <- "dd$weight ~ dd$group"
> summary(lm(model))
> 
> Únicamente tendrías que construir previamente la fórmula con paste.
> 
> La salida es:
> Call:
> lm(formula = model)
> 
> Residuals:
> Min  1Q  Median  3Q Max 
> -1.0710 -0.4938  0.0685  0.2462  1.3690 
> 
> Coefficients:
> Estimate Std. Error t value Pr(>|t|)
> (Intercept)   5.0320 0.2202  22.850 9.55e-15 ***
> dd$groupTrt  -0.3710 0.3114  -1.1910.249
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> Residual standard error: 0.6964 on 18 degrees of freedom
> Multiple R-squared:  0.07308, Adjusted R-squared:  0.02158 
> F-statistic: 1.419 on 1 and 18 DF,  p-value: 0.249
> 
> Un saludo.
> 
> El jue, 18-11-2021 a las 12:03 +0100, Griera escribió:
> > Hola, buenos días:
> > 
> > No es un problema concreto que tenga ahora, pero es un problema general
> > que no se si tiene solución fácil. Hago una regresión (de lm.html):
> > 
> > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > weight <- c(ctl, trt)
> > lm.D9 <- lm(weight ~ group)
> > 
> > Si quiero que la variable independiente sea una "variable", y hago:
> > 
> > X = "group"
> > lm.D9 <- lm(weight ~ X)
> > 
> > Y da el error: Error in model.frame.default(formula = XVD ~ group,
> > drop.unused.levels = TRUE) : 
> >   variable lengths differ (found for 'group')
> > 
> > Ya que, como me decían el otro día "estás asignando a la variable X el
> > valor "X" y no el
> > contenido de la variable X."
> > 
> > ¿No hay forma de que entienda que "X" es el nombre de la variable
> > independiente "group", que no sea pasar la posición de la variable?
> > 
> > Muchas gracias y saludos a todos.
> > 
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> 
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Pasar nombre variable regresión

2021-11-18 Thread Griera-yandex
Hola:

Gracias por la respuesta. Nunca he utilizado variables globales por miedo de 
meter la pata.

Sí, tienes razón. Lo mejor es pasar al nuevo espacio el dataframe. Se 
simplifica mucho.

Gracias y saludos.



On Thu, 18 Nov 2021 13:58:53 +0100
Proyecto R-UCA  wrote:

> Buenas,
> 
> No he profundizado en el motivo pero como dices falla si las variables
> no están en el data.frame. Tienes que agregarlas primero al data.frame.
> 
> Si el espacio del que hablas es el padre, o algún ascendiente, no
> habría problemas, pues R cuando no existe una variable en un entorno
> mira en los padres.
> 
> En caso contrario, lo que puedes hacer es asignar la variable
> globalmente en dicho entorno, por ejemplo
> dd <<- data.frame(weight = weight, group = group, ctl = ctl, trt=trt)
> crearía un data.frame dd accesible desde cualquier parte.
> 
> Esto de crear variables globales debe ser un último recurso pues puede
> generar problemas. Te recomiendo intentes pasar el data.frame como
> argumento a la función que va a hacer las regresiones.
> 
> Un saludo.
> 
> El jue, 18-11-2021 a las 13:34 +0100, Griera-yandex escribió:
> > Gracias por la respuesta!
> > 
> > El código tuyo funciona sin problema, pero cuando lo "adapto" me da
> > error:
> > 
> > > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > + trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > + group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > + weight <- c(ctl, trt)
> > + df <- data.frame (weight = weight, group = group)
> > + rm(ctl, trt, group, weight)   ## Ya que la regresión se
> > ejecutaria, por ejemplo, dentro de otro espacio y estos objetos no
> > estarian accesibles
> > + model <- "df$weight ~ df$group"
> > + summary (lm(model))
> > Error in df$weight : object of type 'closure' is not subsettable
> > 
> > Que estoy haciendo mal?
> > 
> > Muchas gracias y saludos!
> > 
> > 
> > On Thu, 18 Nov 2021 13:12:43 +0100
> > Proyecto R-UCA  wrote:
> > 
> > > Buenas,
> > > 
> > > a ver si esto te sirve:
> > > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > > trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > > group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > > weight <- c(ctl, trt)
> > > dd <- data.frame(weight = weight, group = group, ctl = ctl,
> > > trt=trt)
> > > model <- "dd$weight ~ dd$group"
> > > summary(lm(model))
> > > 
> > > Únicamente tendrías que construir previamente la fórmula con paste.
> > > 
> > > La salida es:
> > > Call:
> > > lm(formula = model)
> > > 
> > > Residuals:
> > >     Min  1Q  Median  3Q Max 
> > > -1.0710 -0.4938  0.0685  0.2462  1.3690 
> > > 
> > > Coefficients:
> > >     Estimate Std. Error t value Pr(>|t|)    
> > > (Intercept)   5.0320 0.2202  22.850 9.55e-15 ***
> > > dd$groupTrt  -0.3710 0.3114  -1.191    0.249    
> > > ---
> > > Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> > > 
> > > Residual standard error: 0.6964 on 18 degrees of freedom
> > > Multiple R-squared:  0.07308,   Adjusted R-squared:  0.02158 
> > > F-statistic: 1.419 on 1 and 18 DF,  p-value: 0.249
> > > 
> > > Un saludo.
> > > 
> > > El jue, 18-11-2021 a las 12:03 +0100, Griera escribió:
> > > > Hola, buenos días:
> > > > 
> > > > No es un problema concreto que tenga ahora, pero es un problema
> > > > general
> > > > que no se si tiene solución fácil. Hago una regresión (de
> > > > lm.html):
> > > > 
> > > > ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
> > > > trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
> > > > group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
> > > > weight <- c(ctl, trt)
> > > > lm.D9 <- lm(weight ~ group)
> > > > 
> > > > Si quiero que la variable independiente sea una "variable", y
> > > > hago:
> > > > 
> > > > X = "group"
> > > > lm.D9 <- lm(weight ~ X)
> > > > 
> > > > Y da el error: Error in model.frame.default(formula = XVD ~
> > > > group,
> > > > drop.unused.levels = TRUE) : 
> > > >   variable lengths 

Re: [R-es] Resumen de R-help-es, Vol 167, Envío 10

2023-01-26 Thread Griera-yandex
Muchas gracias por responder!

Después lo hago.

Saludos.

On Thu, 26 Jan 2023 09:33:31 -0500
patricio fuenmayor  wrote:

> Hola esta es una solución
> 
> library(data.table)
> library(stringr)
> 
> 
> dt <- data.table( V1a = sample(c("1","0"), 10, TRUE)
> , V1b = sample(c("1","0"), 10, TRUE)
> , V2a = sample(c("1","0"), 10, TRUE)
> , V2b = sample(c("1","0"), 10, TRUE)
> , V3a = sample(c("1","0"), 10, TRUE)
> , V3b = sample(c("1","0"), 10, TRUE)
> , V4a = sample(c("1","0"), 10, TRUE)
> , V4b = sample(c("1","0"), 10, TRUE))
> dt[,":="(seq=.I)]
> setcolorder(dt,"seq")
> 
> dt1 <- melt(dt,id.vars=1,measure.vars=2:ncol(dt),variable.name="vrb",
> value.name="vl")
> dt1[,":="(vrb_nm=str_sub(vrb,end=2),vrb_tp=str_sub(vrb,start=-1))]
> dt2 <- dcast(dt1,seq+vrb_nm~vrb_tp,fun.aggregate=\(x)
> paste0(x,collapse="|"),value.var="vl")
> dt2[,":="(c=fifelse(a=="1"|b=="1","1","0"))]
> dt3 <-dcast(dt2,seq~vrb_nm,fun.aggregate=\(x)
> paste0(x,collapse="|"),value.var="c")
> setnames(dt3,paste0(colnames(dt3),"c"))
> dt <- dt[dt3,on=.(seq=seqc)]
> 
> Te crea un grupo de variables tipo c que es la lógica que necesitas .. pero
> le puedes reemplazar por el nombre de "a", qué es lo que muestras en el
> ejemplo
> 
> 
> Saludos
> 
> 
> 
> 
> El jue, 26 ene 2023 a la(s) 06:02, 
> escribió:
> 
> > Envíe los mensajes para la lista R-help-es a
> > r-help-es@r-project.org
> >
> > Para subscribirse o anular su subscripción a través de la WEB
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> > O por correo electrónico, enviando un mensaje con el texto "help" en
> > el asunto (subject) o en el cuerpo a:
> > r-help-es-requ...@r-project.org
> >
> > Puede contactar con el responsable de la lista escribiendo a:
> > r-help-es-ow...@r-project.org
> >
> > Si responde a algún contenido de este mensaje, por favor, edite la
> > linea del asunto (subject) para que el texto sea mas especifico que:
> > "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> > la respuesta sólo aquellas partes del mensaje a las que está
> > respondiendo.
> > Asuntos del día:
> >
> >1. Modificar una serie columnas de un dataframe (Griera)
> >
> >
> > -- Forwarded message --
> > From: Griera 
> > To: r-help-es@r-project.org, gri...@yandex.com
> > Cc:
> > Bcc:
> > Date: Thu, 26 Jan 2023 09:46:57 +0100
> > Subject: [R-es] Modificar una serie columnas de un dataframe
> > Hola:
> >
> > Lo vuelvo a enviar para ver si tengo más suerte:
> >
> > Tengo una tabla con pares de variables (V1a, V1b, V2a, V2b, ...) similar a
> > esta:
> >
> > df <- data.frame( V1a = sample(c("1","0"), 10, TRUE)
> > , V1b = sample(c("1","0"), 10, TRUE)
> > , V2a = sample(c("1","0"), 10, TRUE)
> > , V2b = sample(c("1","0"), 10, TRUE))
> >
> >V1a V1b V2a V2b
> > 10   1   0   0
> > 20   0   1   0
> > 30   1   0   0
> > ...
> >
> > y quiero que V1a valga "1" si V1a o V1b valen 1, V2a valga "1" si V2a o
> > V2b valen 1 y así sucesivamente. Lo hago mediante un transform con una
> > línia para cada pareja de variables:
> >
> > df <- transform (df
> > , V1a = ifelse (V1a == "1" | V1b == "1", "1, "0")
> > , V2a = ifelse (V2a == "1" | V2b == "1", "1, "0"))
> >
> >   )
> > ¿Habria forma de hacerlo (¿con un función?) de manera que no tenga que
> > escribir una línia para cada par de variables?
> >
> > Muchas gracias a todos y saludos.
> >
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Resumen de R-help-es, Vol 167, Envío 10

2023-01-26 Thread Griera-yandex
Hola:

Funciona a la perfección. Y los nombres de las nuevas variables tipo "V1c" 
"V2c"... ya me está bien.

Gracias por habertelo currado tanto! Me has ahorrado copiar, pegar y modificar 
un monton de linias. Y no
tenia conciencia de que podia ser tan complicado.

Gracias por la ayuda. Saludos.

On Thu, 26 Jan 2023 09:33:31 -0500
patricio fuenmayor  wrote:

> Hola esta es una solución
> 
> library(data.table)
> library(stringr)
> 
> 
> dt <- data.table( V1a = sample(c("1","0"), 10, TRUE)
> , V1b = sample(c("1","0"), 10, TRUE)
> , V2a = sample(c("1","0"), 10, TRUE)
> , V2b = sample(c("1","0"), 10, TRUE)
> , V3a = sample(c("1","0"), 10, TRUE)
> , V3b = sample(c("1","0"), 10, TRUE)
> , V4a = sample(c("1","0"), 10, TRUE)
> , V4b = sample(c("1","0"), 10, TRUE))
> dt[,":="(seq=.I)]
> setcolorder(dt,"seq")
> 
> dt1 <- melt(dt,id.vars=1,measure.vars=2:ncol(dt),variable.name="vrb",
> value.name="vl")
> dt1[,":="(vrb_nm=str_sub(vrb,end=2),vrb_tp=str_sub(vrb,start=-1))]
> dt2 <- dcast(dt1,seq+vrb_nm~vrb_tp,fun.aggregate=\(x)
> paste0(x,collapse="|"),value.var="vl")
> dt2[,":="(c=fifelse(a=="1"|b=="1","1","0"))]
> dt3 <-dcast(dt2,seq~vrb_nm,fun.aggregate=\(x)
> paste0(x,collapse="|"),value.var="c")
> setnames(dt3,paste0(colnames(dt3),"c"))
> dt <- dt[dt3,on=.(seq=seqc)]
> 
> Te crea un grupo de variables tipo c que es la lógica que necesitas .. pero
> le puedes reemplazar por el nombre de "a", qué es lo que muestras en el
> ejemplo
> 
> 
> Saludos
> 
> 
> 
> 
> El jue, 26 ene 2023 a la(s) 06:02, 
> escribió:
> 
> > Envíe los mensajes para la lista R-help-es a
> > r-help-es@r-project.org
> >
> > Para subscribirse o anular su subscripción a través de la WEB
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> > O por correo electrónico, enviando un mensaje con el texto "help" en
> > el asunto (subject) o en el cuerpo a:
> >     r-help-es-requ...@r-project.org
> >
> > Puede contactar con el responsable de la lista escribiendo a:
> > r-help-es-ow...@r-project.org
> >
> > Si responde a algún contenido de este mensaje, por favor, edite la
> > linea del asunto (subject) para que el texto sea mas especifico que:
> > "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> > la respuesta sólo aquellas partes del mensaje a las que está
> > respondiendo.
> > Asuntos del día:
> >
> >1. Modificar una serie columnas de un dataframe (Griera)
> >
> >
> > -- Forwarded message --
> > From: Griera 
> > To: r-help-es@r-project.org, gri...@yandex.com
> > Cc:
> > Bcc:
> > Date: Thu, 26 Jan 2023 09:46:57 +0100
> > Subject: [R-es] Modificar una serie columnas de un dataframe
> > Hola:
> >
> > Lo vuelvo a enviar para ver si tengo más suerte:
> >
> > Tengo una tabla con pares de variables (V1a, V1b, V2a, V2b, ...) similar a
> > esta:
> >
> > df <- data.frame( V1a = sample(c("1","0"), 10, TRUE)
> > , V1b = sample(c("1","0"), 10, TRUE)
> > , V2a = sample(c("1","0"), 10, TRUE)
> > , V2b = sample(c("1","0"), 10, TRUE))
> >
> >V1a V1b V2a V2b
> > 10   1   0   0
> > 20   0   1   0
> > 30   1   0   0
> > ...
> >
> > y quiero que V1a valga "1" si V1a o V1b valen 1, V2a valga "1" si V2a o
> > V2b valen 1 y así sucesivamente. Lo hago mediante un transform con una
> > línia para cada pareja de variables:
> >
> > df <- transform (df
> > , V1a = ifelse (V1a == "1" | V1b == "1", "1, "0")
> > , V2a = ifelse (V2a == "1" | V2b == "1", "1, "0"))
> >
> >   )
> > ¿Habria forma de hacerlo (¿con un función?) de manera que no tenga que
> > escribir una línia para cada par de variables?
> >
> > Muchas gracias a todos y saludos.
> >
> >
> > ___
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Resumen de R-help-es, Vol 167, Envío 10

2023-01-27 Thread Griera-yandex
Hola:

Muchas gracias por responder. Lo pruebo.

Saludos.


On Fri, 27 Jan 2023 01:40:48 +0100
Carlos Ortega  wrote:

> Hola,
> 
> Otra alternativa...
> 
> #
> > library(data.table)
> > library(tidytable)
> > library(stringi)
> >
> > df <- data.frame(   V1a = sample(c("1","0"), 10, TRUE)
> +   , V1b = sample(c("1","0"), 10, TRUE)
> +   , V2a = sample(c("1","0"), 10, TRUE)
> +   , V2b = sample(c("1","0"), 10, TRUE))
> > df
>V1a V1b V2a V2b
> 11   0   1   1
> 21   1   0   1
> 30   0   0   0
> 41   0   1   0
> 50   1   0   0
> 60   0   1   0
> 71   0   0   0
> 81   1   1   0
> 90   0   0   0
> 10   0   1   1   1
> > > #--- Función compara parejas de columnas comienzan por mismas 2 letras.
> > *colcompare <- function(df)* {
> +
> +nam_val <- names(df) %>% stri_sub(from = 1, to = 2) %>% unique()
> +res_df  <- data.table()
> +for (i in 1:length(nam_val)) {
> +  cols_tmp <- nam_val[i]
> +  df_tmp <- df %>% select.(starts_with(cols_tmp)) %>%
> +rename.( a = 1) %>%
> +rename.( b = 2) %>%
> +mutate.( c = if_else.( a == 1 | b == 1, 1, 0)) %>%
> +select.(c) %>%
> +as.data.table()
> +names(df_tmp) <- paste0(cols_tmp, "c")
> +res_df <- cbind(res_df, df_tmp)
> +}
> +return(res_df)
> + }
> >
> > #--- Sobre df creado
> > *resultado <- colcompare(df)*
> > resultado
>   V1c   V2c
>  
>  1: 0 1
>  2: 1 0
>  3: 1 1
>  4: 1 1
>  5: 1 1
>  6: 1 1
>  7: 1 1
>  8: 0 0
>  9: 1 1
> 10: 0 1
> #
> 
> 
> Gracias,
> Carlos Ortega
> www.qualityexcellence.es
> 
> El jue, 26 ene 2023 a las 19:55, Griera-yandex ()
> escribió:
> 
> > Hola:
> >
> > Funciona a la perfección. Y los nombres de las nuevas variables tipo "V1c"
> > "V2c"... ya me está bien.
> >
> > Gracias por habertelo currado tanto! Me has ahorrado copiar, pegar y
> > modificar un monton de linias. Y no
> > tenia conciencia de que podia ser tan complicado.
> >
> > Gracias por la ayuda. Saludos.
> >
> > On Thu, 26 Jan 2023 09:33:31 -0500
> > patricio fuenmayor  wrote:
> >
> > > Hola esta es una solución
> > >
> > > library(data.table)
> > > library(stringr)
> > >
> > >
> > > dt <- data.table( V1a = sample(c("1","0"), 10, TRUE)
> > > , V1b = sample(c("1","0"), 10, TRUE)
> > > , V2a = sample(c("1","0"), 10, TRUE)
> > > , V2b = sample(c("1","0"), 10, TRUE)
> > > , V3a = sample(c("1","0"), 10, TRUE)
> > > , V3b = sample(c("1","0"), 10, TRUE)
> > > , V4a = sample(c("1","0"), 10, TRUE)
> > > , V4b = sample(c("1","0"), 10, TRUE))
> > > dt[,":="(seq=.I)]
> > > setcolorder(dt,"seq")
> > >
> > > dt1 <- melt(dt,id.vars=1,measure.vars=2:ncol(dt),variable.name="vrb",
> > > value.name="vl")
> > > dt1[,":="(vrb_nm=str_sub(vrb,end=2),vrb_tp=str_sub(vrb,start=-1))]
> > > dt2 <- dcast(dt1,seq+vrb_nm~vrb_tp,fun.aggregate=\(x)
> > > paste0(x,collapse="|"),value.var="vl")
> > > dt2[,":="(c=fifelse(a=="1"|b=="1","1","0"))]
> > > dt3 <-dcast(dt2,seq~vrb_nm,fun.aggregate=\(x)
> > > paste0(x,collapse="|"),value.var="c")
> > > setnames(dt3,paste0(colnames(dt3),"c"))
> > > dt <- dt[dt3,on=.(seq=seqc)]
> > >
> > > Te crea un grupo de variables tipo c que es la lógica que necesitas ..
> > pero
> > > le puedes reemplazar por el nombre de "a", qué es lo que muestras en el
> > > ejemplo
> > >
> > >
> > > Saludos
> > >
> > >
> > >
> > >
> > > El jue, 26 ene 2023 a la(s) 06:02, 
> > > escribió:
> > >
> > > > Envíe los mensajes para la lista R-help-es a
> > > > r-help-es@r-project.org
> &g

Re: [R-es] Expresión en un objeto

2023-08-11 Thread Griera-yandex
Gracias, Isidro, por la ayuda:

On Fri, 11 Aug 2023 09:16:34 +
Isidro Hidalgo Arellano  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  En nombre de Griera
> Enviado el: jueves, 10 de agosto de 2023 19:36
> Para: r-help-es@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@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Expresión en un objeto

2023-08-11 Thread Griera-yandex
Muchas gracias, Manuel:

Que bueno! No se me había ocurrido lo de GPT!

Lo pruebo.

Saludos.

On Fri, 11 Aug 2023 18:15:18 +0200
Manuel Mendoza  wrote:

> Esta es la respuesta que te da ChatGPT-4:
> 
> Entiendo tu pregunta y, aunque no hay una función nativa en R que te
> permita hacer exactamente lo que estás pidiendo, puedes lograr el mismo
> resultado utilizando una función. Una función te permitiría encapsular la
> lógica de la expresión que quieres reutilizar y luego llamar a esa función
> donde sea necesario.
> 
> He aquí cómo podrías hacerlo:
> 
> 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)
> 
> # Definir una función que encapsula la lógica de la expresión
> myFunc <- function(V2a, V2b) {
>   ifelse(is.na(V2a) & !is.na(V2b), V2b, V2a)
> }
> 
> # Luego puedes usar esa función donde necesites la expresión
> V3 <- ((myFunc(V2a, V2b) - V1)/V1)*100
> V4 <- ifelse(!is.na(((myFunc(V2a, V2b)-V1)/V1)*100), ifelse(((myFunc(V2a,
> V2b)-V1)/V1)*100 > 0, "1", "0"), NA)
> ```
> 
> Definir la lógica dentro de una función te brinda la flexibilidad de
> reutilizar esa lógica en diferentes partes de tu código sin tener que
> repetir la misma expresión una y otra vez. Esto hace que tu código sea más
> fácil de leer y mantener.
> 
> 
> 
> El jue, 10 ago 2023 a las 19:36, Griera () escribió:
> 
> > 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@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Expresión en un objeto

2023-08-12 Thread Griera-yandex
Hola, Manuel:

La propuesta es lógica y funciona:

> 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)
+ # Definir una función que encapsula la lógica de la expresión
+ myFunc <- function (V2a, V2b) {
+  ifelse(is.na(V2a) & !is.na(V2b), V2b, V2a)
+ }
+ # Luego puedes usar esa función donde necesites la expresión
+ V3 <- ((myFunc(V2a, V2b) - V1)/V1)*100
+ V4 <- ifelse(!is.na(((myFunc(V2a, V2b)-V1)/V1)*100),
  ifelse(((myFunc(V2a, V2b)-V1)/V1)*100 > 0, "1", "0"), NA)

Está en la línea de la solución propuesta por Juan Abasolo.

Pero no es lo qu buscaba que, por lo que veo, no existe.

Gracias a todos por las sugerencias.

Saludos.



On Sat, 12 Aug 2023 05:07:26 +0200
Manuel Mendoza  wrote:

> No tuve tiempo de mirarlo, pero, ¿es coherente lo que dice?
> 
> El vie, 11 ago 2023 a las 21:02, Griera-yandex ()
> escribió:
> 
> > Muchas gracias, Manuel:
> >
> > Que bueno! No se me había ocurrido lo de GPT!
> >
> > Lo pruebo.
> >
> > Saludos.
> >
> > On Fri, 11 Aug 2023 18:15:18 +0200
> > Manuel Mendoza  wrote:
> >
> > > Esta es la respuesta que te da ChatGPT-4:
> > >
> > > Entiendo tu pregunta y, aunque no hay una función nativa en R que te
> > > permita hacer exactamente lo que estás pidiendo, puedes lograr el mismo
> > > resultado utilizando una función. Una función te permitiría encapsular la
> > > lógica de la expresión que quieres reutilizar y luego llamar a esa
> > función
> > > donde sea necesario.
> > >
> > > He aquí cómo podrías hacerlo:
> > >
> > > 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)
> > >
> > > # Definir una función que encapsula la lógica de la expresión
> > > myFunc <- function(V2a, V2b) {
> > >   ifelse(is.na(V2a) & !is.na(V2b), V2b, V2a)
> > > }
> > >
> > > # Luego puedes usar esa función donde necesites la expresión
> > > V3 <- ((myFunc(V2a, V2b) - V1)/V1)*100
> > > V4 <- ifelse(!is.na(((myFunc(V2a, V2b)-V1)/V1)*100),
> > ifelse(((myFunc(V2a,
> > > V2b)-V1)/V1)*100 > 0, "1", "0"), NA)
> > > ```
> > >
> > > Definir la lógica dentro de una función te brinda la flexibilidad de
> > > reutilizar esa lógica en diferentes partes de tu código sin tener que
> > > repetir la misma expresión una y otra vez. Esto hace que tu código sea
> > más
> > > fácil de leer y mantener.
> > >
> > >
> > >
> > > El jue, 10 ago 2023 a las 19:36, Griera () escribió:
> > >
> > > > 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@r-project.org
> > > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > > >
> >

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Expresión en un objeto

2023-08-14 Thread Griera-yandex
Hola:

Si, esto está mucho más cerca de lo que quería! Creo que es la solución.

Gracias! Lo trabajo!

Saludos.

On Mon, 14 Aug 2023 10:14:06 +0200
Proyecto R-UCA  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 +
> > Isidro Hidalgo Arellano  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  En nombre de Griera
> > > Enviado el: jueves, 10 de agosto de 2023 19:36
> > > Para: r-help-es@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@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@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@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Expresión en un objeto

2023-08-14 Thread Griera-yandex
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.50   0.625000 -72.22

# 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.50   0.625000 -72.22

# 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  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 +
> > Isidro Hidalgo Arellano  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  En nombre de Griera
> > > Enviado el: jueves, 10 de agosto de 2023 19:36
> > > Para: r-help-es@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.

Re: [R-es] Expresión en un objeto

2023-08-15 Thread Griera-yandex
Hola, José Luis:

Muchas gracias por responder. No conocía esta función. La reviso.

Pero en el problema que planteaba, la identificación de los valores 
desconocidos era como un ejemplo, no que realmente los necesitase identificar. 
El problema que planteaba era si en una una orden, por ejemplo:

V3 <- ((V1 - V2) / (V2)) * 100

se podía substituir una parte de ella por un texto almacenado en un objeto. Es 
decir, algo así como en el ejemplo:

> V1 <- c (47, 71,  41,  23,  83, 152,  82,   8, 160,  18)
+ V2 <- c (NA, 36,  15,   5,  56,  18,  NA,   5,  NA,   5)
+ V3 <- ((V1 - V2) / (V2)) * 100
+ V3
 [1]NA  97.2 173.3 360.0  48.21429 744.4NA
 [8]  60.0NA 260.0

substituir "(V1 - V2)" por un texto almacenado en un objeto. La solución de 
R-UCA seria:

> OBJ <- "(V1 - V2)"
+ V3 <- eval(parse(text = paste0 ("(", OBJ, "/ (V2)) * 100")))
+ V3
 [1]NA  97.2 173.3 360.0  48.21429 744.4NA
 [8]  60.0NA 260.0

Gracias por la ayuda y saludos.


On Mon, 14 Aug 2023 15:29:00 + (UTC)
jose luis  wrote:

>  Hola, no estoy seguro de si es esto lo que te hace falta. ¿conoces la 
> funcion "coalesce"?
> coalesce function - RDocumentation
> 
> 
> | 
> | 
> |  | 
> coalesce function - RDocumentation
> 
> Given a set of vectors, coalesce() 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 
>  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.50  0.625000 -72.22
> 
> # 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.50  0.625000 -72.22
> 
> # 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  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 +
> > > Isidro Hidalgo Arellano  wrote:
> > > 
> > > > A ver... con que xfunc() esté preparada para tomar un parámetro de tipo 
> > > > &