Dataframe TO svo

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Dataframe TO svo

Juha Valtonen

Onko niin, että
FILE SAVE R>df  TO  svo    
on ihan sama toiminto kuin
FILE COPY R>df TO svo

ja mitkään määritteet (esim FIRST, LAST, SELECT) ei pure komentoon?
Tekee siis aina uuden svo:n, ja muuttujamuodot määrätyvät automaagisesti?

Törmäsin tilanteeseen, jossa suurehko luku tuli svo-tiedostossa neljätavuiseksi, ja alkuperäinen
arvo muuttui siirrossa?


Reply | Threaded
Open this post in threaded view
|

Re: Dataframe TO svo

Reijo Sund
Administrator
Nuo FILE SAVE ja FILE COPY ovat tosiaan sama asia. Määreitä ei taida olla mukana tuohon R:stä Survoon suunnassa mukana niin, että toimisivat. Toisin päin normaalit datan rajoittimet muistaakseni kuitenkin ovat käytettävissä. R:n datatyypit muunnetaan Survo datan tyypeiksi automaattisesti ja pitäisi mennä niin, ettei dataa ainakaan häviä. Muistaakseni nelostyyppiä ei käytetä lainkaan vaan on varmuuden vuoksi aina kasityyppi, jos ei taatusti pienempään mahtuva rajoitettu R:n tyyppi. Voisitko laittaa tuosta ongelmallisesta R-datasta sen osan, jossa muuntuu väärin Survoon päin? Silloin olisi helpointa selvittää mikä ei mene oikein.
Reply | Threaded
Open this post in threaded view
|

Re: Dataframe TO svo

Juha Valtonen
Ongelman juurisyy taitaa olla read.csv:ssä:

Lähtödata on tämän muotoista:

Onnett_id;Osall_id;Osnro;Oslaji;Oslajisel;Perõv;Perõvsel;Ajolaji;Ajolajisel;Kuollut;Loukk;Kulkusuun;Kulkussel;Ajoneuvika;Ajoneuvmas
9621978;17173988;1;30;henkil÷auto;-1;Ei arvoa;-1;Ei arvoa;0;0;-1;Ei arvoa;12;1635
9621978;17173989;2;10;jalankulkija;-1;Ei arvoa;-1;Ei arvoa;0;1;-1;Ei arvoa;;
9621357;17173990;1;32;kuorma-auto;1;puoliperõvaunu;-1;Ei arvoa;0;0;-1;Ei arvoa;;
9621357;17173991;2;30;henkil÷auto;-1;Ei arvoa;-1;Ei arvoa;0;0;-1;Ei arvoa;12;1580

Kun sen lukee dataframeksi, niin nuo kaksi ekaa muuttujaa tuleva "int"-muotoisiksi
> str(osall)
'data.frame':   18228 obs. of  15 variables:
 $ Onnett_id : int  9621978 9621978 9621357 9621357 9621979 9621979 9621980 9621980 9621459 9621459 ...
 $ Osall_id  : int  17173988 17173989 17173990 17173991 17173992 17173993 17173994 17173995 17173996 17173997 ...
 $ Osnro     : int  1 2 1 2 1 2 1 2 1 2 ...
 $ Oslaji    : int  30 10 32 30 30 30 30 30 32 30 ...
 $ Oslajisel : chr  "henkilöauto" "jalankulkija" "kuorma-auto" "henkilöauto" ...

Ja kun dataframen vie survoon, niin nuo int muodot tulevat nelostyypiksi, mistä sitten seuraa se, että
noissa suurissa luvuissa alkaa jotain mennä pieleen. Ongelmahan poistuu, jos hoksaa muuttaa muuttujan R:ssä as.numeric ennen Survoon siirtoa.

file status tmp
 Copied from R data frame osall
FIELDS: (active)
   1 NA_   4 Onnett_id
   2 NA_   4 Osall_id
   3 NA_   2 Osnro
   4 NA_   2 Oslaji
   5 SA_  31 Oslajisel
   6 NA_   2 Peräv


Mutta siis, ilmeisesti R:n datafamessa voi integerinä olla niin suuria lukuja, joita Survo ei enää täysin ymmärrä nelostyyppinä.






Reply | Threaded
Open this post in threaded view
|

Re: Dataframe TO svo

Reijo Sund
Administrator
Juha Valtonen wrote
Mutta siis, ilmeisesti R:n datafamessa voi integerinä olla niin suuria lukuja, joita Survo ei enää täysin ymmärrä nelostyyppinä.
Kiitos ongelman seikkaperäisestä kuvauksesta. Näytti tosiaan olevan R2SVO-muunnoksessa ehtoja muuttujan minimi ja maksimiarvojen perusteella sille, että milloin tulee mitäkin tyyppiä, kun R:ssä on int-tyyppinen muuttuja, mutta jos ei näytä olevan tyyppiin 1 tai 2 mahtuva, niin lopuille tulee tyyppi 4. Kävin vaihtamassa sen nyt tyypiksi 8 eli sen pitäisi korjata tilanne. Toivottavasti ei tule ongelmia siitä, että tuo muunnoksen tyyppi nyt vaihdettu - ei ole iso työ katsoa rajoja erikseen tyypille 4, mutta en sitä nyt kuitenkaan alkanut tekemään, kun tuo tyyppi 8 joka tapauksessa "turvallisempi".

Pitäisi tässä illan mittaan päivittyä R-universeen, josta voi sitten päivittää uuden version (joskin versionumero pysyi samana eli kannattaa katsoa, että varmasti hakee uuden version).
Reply | Threaded
Open this post in threaded view
|

Re: Dataframe TO svo

Juha Valtonen
Toimii - varmasti hyvä ratkaisu käyttää suoraan 8-muotoa.
Kiitos taas :)