» »

R program, prosim za pomoč

R program, prosim za pomoč

poletje2016 ::

Dober dan,

sem popoln začetnik v R (studio) programu. Lahko kdo pomaga pri par zadevah (predvsem izdelava IF stavkov). Vam bo enostavno, vam pa enostavno.

Imam podatke za maksimalno temperaturo po dnevih.

Ogromne težave mi dela IF koda:

Iz podatkov poskušam ugotoviti naslednje:

Povprečno (+st.odklon) in maksimalno trajanje vročinskega vala,
· število vročinskih valov,
· število dni v vročinskih valovih,
· datum najzgodnejšega in najpoznejšega začetka vročinskega vala,
· ploščino nad pragom (29,5°C, seštejemo vsoto temperatur nad pragom v
vseh valovih).


Kako in ali smem priložiti file s podatki ?

ales85 ::

Podatke lahko deliš preko WeTransfer (ali druge storitve). Sicer pa, če ti kodiranje dela težave, lahko veliko narediš že z R Commander-jem.

Zgodovina sprememb…

  • spremenil: ales85 ()

poletje2016 ::

ali kdo se kdo tu spozna na R (studio) okolje?

hvala

ales85 je izjavil:

Podatke lahko deliš preko WeTransfer (ali druge storitve). Sicer pa, če ti kodiranje dela težave, lahko veliko narediš že z R Commander-jem.

amacar ::

Kaj rabiš?

poletje2016 ::

Imam podatke v txt datoteki v 4 stolpcih. Podatki so za dnevne maximalne temperature za dosti let.

Imam kodo / kode, ki pa ne dela :(

Kaj predlagaš, kam ti jo dam COPY / PASTE , da malo pogledaš. Hvala

amacar ::

Lahko prilepiš tu v [ st.koda][ /st.koda] značke (izbriši presledek v znački).

Zgodovina sprememb…

  • spremenil: amacar ()

poletje2016 ::

kako prilepim sem txt datoteko ?

amacar ::

Vsebino prilepiš v zgoraj omenjene st.koda značke. Prilepi tudi kodo, ki si jo že napisal.

Zgodovina sprememb…

  • spremenil: amacar ()

poletje2016 ::

katera ikona mi omogoča prilepiti txt datoteko ?

amacar ::

Znak
<>
v orodni vrstici.

poletje2016 ::

Imam tele podatke v txt datoteki:

  leto   mesec   dan   temmax
1879 1 1 7,8
1879 1 2 7,5
1879 1 3 5,6
1879 1 4 6,2

in še ostala leta

Vročinski val je trenutno pri nas definiran kot vsaj 5 zaporednih dni z maksimalno temperaturo zraka
>=29,5 °C.

Kode moram narediti za:

Povprečno (+st.odklon) in maksimalno trajanje vročinskega vala

število vročinskih valov

število dni v vročinskih valovih,ž
.................
moja NEUSPEŠNA koda :(

library("forecast", lib.loc="~/R/win-library/3.1")

data<-read.table("LJUBLJANA.txt",header=TRUE,sep="\t");
head(data)

dec = ",";

# pisanje v indekse
j<-1;
nad29.5 <- 0;
temmax<-1:46816;
dim(temmax)<-c(46816,1);

#podatki za obdobje 1879 - 2016


for(i in 1:length(data$leto)) {
  if(data[i,1] >= 1879 & data[i,1] <= 2016)  {
    if(data[i,4] > 29.5){nad29.5 <- nad29.5 + 1;}
    
    ## ko se leto zamenja vpišemo podatke in ponastavimo indekse
    if(data[i,1] > j+1878){temmax[j,1] <- nad29.5;nad29.5 <- data[i,4];j <- j+1;}
    
      }
#grafični prikaz
summary(temmax)
cas.niz<-ts(temmax, start=1879)
ma5<-ma(cas.niz, order=5)
ma10<-ma(cas.niz, order=10);


plot(1879:2016, temperatura, main="maksimalna temperatura (1879-2016)",
     type="l",lwd=2, xlab= "leto", ylab= "temperatura[°C]", ylim=c(min(temperatura)-5,max(temperatura)+5),
     lines(ma5, col="orange", lwd=2),
     lines(ma10, col="red",lwd=2 ),
     abline(h=min(temperatura), col="blue",lty=2),
     abline(h=mean(temperatura), col="black",lty=2),
     abline(h=max(temperatura), col="red",lty=2),
     
     legend("top", ncol = 3, cex=0.5, legend=c("osnoven graf", "povprečje na 5 let",
                                               "povprečje na 10 let", "max", "min", "povprečje"),
            col=c("black", "orange", "red", "red","blue","black"), 
            lwd=c(2,2,2,1),lty=c(1,1,1,2)),

poletje2016 ::

moja koda za:

število vročinskih valov


j - 1
a 0
st 0
nad29.5 -1:46816
dim(nad29.5)-c(46816,1)

for(i in 1:length(data$leto)) {
if(data[i,1] 1879 & data[i,1] 2016 ) {
### med letom
if(data[i,1] j+1879){
### če podatek ustreza padavinskemu dogodku
if(data[i,4] 29.5 & a 1 ){a 2;st st + 1; }
#### če podatek ustreza novemu dogodku
if(data[i,4] 29.5){a 29.5;}

}

### ko podatek doseže konec leta ga vpišemo
if(data[i,1] j+1878){nad29.5[j,1] st;st 0;
if(data[i,4] 29){st st + 1;}
j j+1;}

which.min(nad29.5)
which.max(nad29.5)

}
}




in za število dni v vročinskih valovih,

ne znam narediti


...........

hvala

h1427096 ::

mislim, da iščeš rle funkcijo:
r <- rle(data$temmax >= 29.5)


ali te bolj zanima kako bi z if stavki?

Zgodovina sprememb…

  • spremenil: h1427096 ()

poletje2016 ::

kako z If stavki

h1427096 ::

a lahko še enkrat pošlješ svojo kodo, da vidim kako si se sploh lotil? V prvem postu ti jo namreč nekaj manjka, v drugem pa si poszsbil na [ st.koda] tag in manjkajo vsi znaki za manjše in večje..

za začetek vsekakor predlagam, da decimalni simbol določiš kot parameter read.table funkcije, se pravi:
data<-read.table("LJUBLJANA.txt",header=TRUE,sep="\t", dec=",")

Sedaj lahko z ukazom
str(data)

preveriš, da je stolpec temmax prebran kot numeric in ne kot factor, ki se obnaša precej čudno - priporočam, da se read.table ukazom vselej določi parameter stringsAsFactors = FALSE.

Drugo, zaradi encodinga imaš verjetno težave z imeni stolpcev. Ker so stolpci itak int/num, je najbolje, da si jih kar na novo poimenuješ skozi kodo:
names(data) <- c("leto", "mesec", "dan", "temmax")


S tem se boš lahko na stolpce skliceval z imeni, to z indexi je namreč zelo težko berljivo


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Klimatska naprava

Oddelek: Pomoč in nasveti
294159 (3662) AC_DC
»

Računalnik je obsedel hudič (strani: 1 2 )

Oddelek: Pomoč in nasveti
506910 (4856) GTX970
»

Fx-8120 (strani: 1 2 )

Oddelek: Navijanje
5412980 (11605) barocco
»

Kdo pa rabi pečko poleti?

Oddelek: Hlajenje in modifikacije
151427 (1070) Neo32

Več podobnih tem