Foro de discusión y soporte para usuarios de R

Un foro abierto a todos los temas relacionados con R que quiera.
Nota: Una url estable a este foro es https://knuth.uca.es/R-foro.

Dibujar velocidad viento

de Yurena Hernández -
Hola, tengo un archivo .nc con valores de velocidad de viento y debo representarlo para saber la dirección del viento. Pero me faltan los componentes x e y (u y v).
¿Alguna idea por donde empezar a "dibujar"?.
Muchas gracias de antemano. Este foro me ha ayudado a resolver bastantes dudas.

Os dejo un print del archivo:
dimensions:
        lon = 3 ;
        lat = 5 ;
        time = UNLIMITED ; // (96 currently)
variables:
        float lon(lon) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "Longitude" ;
                lon:units = "degrees_east" ;
                lon:axis = "X" ;
        float lat(lat) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "Latitude" ;
                lat:units = "degrees_north" ;
                lat:axis = "Y" ;
        double time(time) ;
                time:standard_name = "time" ;
                time:long_name = "Time" ;
                time:units = "hours since 1800-01-01 00:00:00" ;
                time:calendar = "standard" ;
        float wspd(lon, lat, time) ;
                wspd:long_name = "Monthly Mean Wind Speed at sigma level 0.995 from daily wind speed (from daily vector winds)" ;
                wspd:units = "m/s" ;
                wspd:_FillValue = 99999 ;
                wspd:missing_value = 99999 ;
                wspd:precision = 2 ;
                wspd:least_significant_digit = 1 ;
                wspd:var_desc = "Wind Speed" ;
                wspd:dataset = "CDC Derived NCEP Reanalysis Products" ;
                wspd:level_desc = "Surface" ;
                wspd:statistic = "Mean" ;
                wspd:parent_stat = "Other" ;
                wspd:actual_range = 0.509994521.33 ;

// global attributes:
                :CDI = "Climate Data Interface version 1.6.2 (http://code.zmaw.de/projects/cdi)" ;
                :Conventions = "COARDS" ;
                :history = "Wed Nov 26 10:45:57 2014: cdo ymonsub wind3.nc -ymonmean wind3.nc wind.nc
Wed Nov 26 10:45:57 2014: cdo setmissval,99999 wind2.nc wind3.nc
Fri Nov 07 12:47:46 2014: cdo seldate,2006-01-01,2013-12-01 wind1.nc wind2.nc
Fri Nov 07 12:20:04 2014: cdo sellonlatbox,-20.0,-15.0,30.0,20.0 wspd.nc wind1.nc
Thu May  4 20:11:50 2000: ncrcat -d time,0,623 /Datasets/ncep.reanalysis.derived/surface/wspd.mon.mean.nc wspd.mon.mean.nc
Mon Jul  5 23:54:34 1999: ncrcat ./wspd.mon.mean.nc /Datasets/ncep.reanalysis.derived/surface/wspd.mon.mean.nc /dm/dmwork/nmc.rean.ingest/combinedMMs/surface/wspd.mon.mean.nc
Oct 26 23:42:16 1995 from 4 time daily u,v wind speeds
created 99/04/15 by CAS (netCDF2.3)
Converted to chunked, deflated non-packed NetCDF4 2014/09" ;
                :description = "Data from NCEP initialized reanalysis (4x/day).  These are the 0.9950 sigma level values" ;
                :platform = "Model" ;
                :references = "http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.derived.html" ;
                :NCO = "20121012" ;
                :title = "monthly mean wspd.sig995 from the NCEP Reanalysis" ;
                :CDO = "Climate Data Operators version 1.6.2 (http://code.zmaw.de/projects/cdo)" ;
>

Marcas en eje con escala logaritmica

de Isabel Sánchez Muñoz -

Hola: Soy nueva usuaria de R y tengo el siguiente problema: 
Estoy dibujando un gráfico de lineas y puntos con el comando plot con escala logarítmica en el eje 0Y y necesito modificar las marcas del eje. Concretamente necesito que el rango sea [10^-12, 10^-1] con una marca en cada potencia negativa de 10: 10^-12, 10^-11, 10^-10...
En el eje 0X tengo la escala lineal y lo he modificado sin problema con el comando "xaxp" pero no consigo usar bien "yaxp" con la escala logarítmica ni encuentro ningún ejemplo que me lo aclare.

Agradezco si alguien puede ayudarme.

Saludos cordiales, Isabel Sánchez.

Modificar eje X

de Marina Sev -
Buenas tardes,

estoy tratando de sacar unas gráficas de líneas, pero me encuentro con el siguiente problema.

Tengo un data frame (sp12) con 4 columnas:

mes - año - var1 - var2

Mi intención es representar en un gráfico de líneas, por ejemplo, la variable 1, donde el eje Y muestre los valores de la variable y el eje X los años.

Mi problema viene que tengo el mismo valor de año repetido 12 veces (por los 12 meses del año) tal como muestro a continuación:


Aplicando la línea:
 
plot(x=sp12$YEAR, y=sp12$A1_12,col='black', type='l',main='A1', xlab='Años', ylab='valor') 

obtengo la gráfica de la primera imagen adjunta, toma desordenados los valores de la variable 1 (A1_12).

Aplicando esta línea:

plot(sp12[,3],type='l')


obtengo los valores correctamente ordenados, pero el eje X no muestra los años.


He probado distintos comandos que he encontrado pero casi siempre vienen referidos a formatos 'fecha' (ej as.date). He indagado en la librería ggplot2 y lattice, pero no doy con la tecla.

Lo que quiero conseguir es insertar un eje X con los años únicamente.


Gracias de antemano.

Modelos Mixtos - Modelar la correlacion

de Pilar MP -

Estimados

Estoy ajustando un modelo mixto sencillo para la variable nitratos del suelo medido en el tiempo, siendo el factor fijo el tiempo (DAI=dias de incubacion a campo) y el factor aleatorio la replica (Rep=la parcela).Cuando intento modelar la correlacion simetrica con el comando corSymm(form=~DAI|Rep) me dice

Error in Initialize.corSymm(X[[i]], ...) :  unique values of the covariate  for "corSymm" objects must be a sequence of consecutive integers

La variable DAI tiene estos valores

[1]  0  0  0  0 23 23 23 23 36 36 36 36 50 50 50 50 64 64 64

[20] 64

Sin embargo, si me permite correr el modelo con la correlacion corCAR1. Alguien sabe a que puede deberse?

Muchas gracias

Saludos





Consulta logica

de Marina Sev -

Buenos días,

en primer lugar siento el nivel básico y elemental que pueda tener esta consulta, soy iniciada en R. Estoy trabajando con unos datos agrarios y me gustaría poder explorarlos a partir de agregaciones por tipo de cultivo y año.

He depurado los datos quedándome con aquellos que me interesan. La estructura de mis datos (simplificada, tengo más variables) es:

Año (YEAR) | Codigo Comunidad Autonoma | Codigo Provincia | Conjunto de parcela*(NUM) | Parcela | Cultivo**(CUL) | Rendimiento (RTO)

(*Las parcelas se insertan en distintos conjuntos de parcelas.)

(**Cultivo es una variable factor que toma valores: AM, C2,C6,GI...)

Rendimiento es mi principal variable, ya que es el dato que me interesa conocer.

He realizado una primera 'consulta' con la función Aggregate

  • rendiseg<-aggregate(datos$RTO,list(datos$CUL,datos$NUM,datos$YEAR),sum)

Así he conseguido conocer el rendimiento total por cultivo, conjunto de parcela y año.

En mi segunda consulta he querido realizar un filtro por tipo de cultivo, por ejemplo para el primero que serían almendros (AM)

  • rendiAM<-aggregate(datos$RTO,list(datos$CUL=='AM',datos$NUM,datos$YEAR),sum)

Lo que R me devuelve es la misma tabla que rendiseg, pero en la columna de los cultivos aparecen expresiones lógicas TRUE y FALSE en función a qué campo cultivo cumple la función de que sea igual a 'AM'.

Lo que me gustaría obtener es por grupo de parcela, parcela y año, el rendimiento para un tipo de cultivo en modo tabla sin que me aparezcan TRUE y FALSE, sino simplemente los valores de Almendro.


No sé si mi explicación sobre la duda es demasiado clara.


Agradezco de antemano cualquier tipo de ayuda.


ERROR: ‘range’ not meaningful for factors

de Yurena Hernández -

Hola, alguien sabe porqué sucede este error:

Error en Summary.factor(c(60L, 25L, 32L, 65L, 97L, 159L, 194L, 244L, 279L, : ‘range’ not meaningful for factors

Gracias!.

Remplazar valores en R

de David Martínez Briseño -

Tengo una variable que expresa un porcentaje. Parte de la observaciones de variable están en porcentaje y otras en decimal. Ejemplo:

Var1

89

75

40

.35

.65

.70


Quiero remplazar los valores decimales por valores enteros. Es decir, 0.35 por 35.

Usé la siguientes instrucciones pero no funcionan:

datos$var1[datos$var1<1] <-var1*100

datos$var1[which(datos$var1<1)] <-var1*100

El mensaje que después de la instrucción es:

number of items to replace is not a multiple of replacement length

¿Cómo puedo hacer el cambio?

Gracias por la ayuda


Gracias por la ayuda




Método de cuadrados medios, John Von Neumann

de oscar martinez -
Me pueden ayudar a programar este generador de números aleatorios? Consiste en tomar un número entero inicial aleatoriamente de 2n cifras y generar la secuencia como las 2n cifras centrales resultantes al elevar al cuadrado su predecesor. Programa este generador y detecta sus principales problemas.

método de Lehmer

de oscar martinez -
Hola, a ver si me pueden ayudar a programar este generador de números aleatorios. Gracias. Consiste en tomar dos números enteros x0 y c, de n y k cifras, respectivamente (con k < n), calcular x0c y separar sus k cifras de la izquierda, y al número formado por las cifras restantes se le resta el número formado con dichas k cifras. Hay que programar este generador y detectar sus principales problemas.

Optimización - solnp

de Ronald Miranda -

Que tal?

Tengo los siguientes datos:

>newdatos

   Departamento Actividad   area elasticidad Ingresoxha    precio    costos  produccion lambda1       OP1       ALPHA1    LAMBDA2i1

1             1         1   5862   0.3052655   249.6103 3663.0000  553.3957    399.4582   72.02 0.1594879 1.001184e+02  -585.605890

2             1         2   3790   0.3053532   607.1605  271.1768  483.4507   8485.7499  185.61 0.1559047 2.348355e+03  -574.401512

3             1         3  12186   0.3054410  2226.0968  246.0000 1414.0000 110273.2320   75.53 0.1557844 2.546577e+04 -1142.738933

4             1         4   3442   0.3055287   873.5717 4558.9336   92.0000    659.5476   36.30 0.1555019 1.858940e+02     7.542038

5             1         5 107459   0.3056165   142.6272 1558.0083   93.0000   9837.2869   36.30 0.8981847 2.977762e-01    -1.194445

6             1         6   1459   0.3057043  1080.0976  410.0000  926.2996   3843.5669   81.39 0.1550390 1.242175e+03  -840.232421

7             2         1  15084   0.3057920   249.6103 3663.0000  553.3957   1027.8792   72.02 0.2388242 1.032788e+02  -565.802721

8             2         2   1031   0.3058798   433.6256  227.7168  498.3463   1963.2633  185.61 0.2344137 3.860374e+02  -582.308481

9             2         3   6297   0.3059675  2226.0968  246.0000 1414.0000  56982.6475   75.53 0.2344997 7.325660e+03  -967.510900

10            2         4  80409   0.3060553   873.5717 4558.9336   92.0000  15407.7760   36.30 0.2414303 1.007978e+03    82.606664

11            2         5 255026   0.3061430   142.5132 1556.7632   93.0000  23346.2431   36.30 0.8218663 8.408677e-01   -12.173206

12            2         6    906   0.3062308  1080.0976  410.0000  575.2073   2386.7523   81.39 0.2345015 4.834553e+02  -403.312795

#########################

#Y me genera un problema de este tipo 

In .safefunx(tmpv, .solnp_fun, .env, ...) : 



solnp-->warning: NaN detected in function call...check your function

#cuando aplico:

MP<-function(newdatos1,j){

  filtronewdatos<-newdatos1[newdatos1[,1]==j,]

  filtronewdatos

    # Re-nombro las variables

  dptonew<-filtronewdatos[,1]      # j departamentos

  actnew<-filtronewdatos[,2]       # i actividades 

  xnew<-filtronewdatos[,3]         # superficie en ha de la actividad i

  etanew<-filtronewdatos[,4]       # elasticidad de oferta (exógena)

  ingresosnew<-filtronewdatos[,5]  # revenue<-price*output  #output (kg) <-rendimiento (kg/ha) * x (ha)

  pricenew<-filtronewdatos[,6]     # precio internacional

  cinew<-filtronewdatos[,7]        # costo unitario por ha

  qnew<-filtronewdatos[,8]         # producción    

  lambda1new<-filtronewdatos[,9]   # Precio sombra de la tierra = precio de la renta de la tierra por ha

  deltas<-filtronewdatos[,10] 

  alpha<-filtronewdatos[,11] 

  lambda2<-filtronewdatos[,12] 

    lamb1i<-lambda1new                # precio sombra - precio de arrendamiento de la tierra

   

  np1<-cbind(pricenew,alpha,deltas,cinew,lambda2,lamb1i,xnew)

    #Función objetivo

  prof1<-function(area0,np=np1){

    areaX<-area0

    -(sum(np1[,1]*np1[,2]*(areaX^np1[,3])-(np1[,4]+np1[,5])*areaX))

   }

    #Restricción

  eqn1<-function(area0,L=sum(np1[,7])){(sum(area0)-L)}

    par0<-c(np1[,7]-np1[,7]+100) # valor de los parámetros iniciales para comenzar a optimizar

    Mx1<-solnp(par0,prof1,eqfun = eqn1,eqB = c(0),LB=NULL,UB=NULL,control = list(maxit=1000,tol=1e-10))

  return(Mx1$pars)

}

###########################################################################################

# Aplicación de la función "MP" de maximización del problema

 land<-list()

for(j in 1:2){

  land[[j]]<-MP(newdatos,j) # utilizo la base "newdatos" y j es la región que varia 

 }

land  

# me determina los valores de land pero no son los originales que debería replicar además de tirarme ese error previamente señalado