Barbara C.

Barbara C. Specjalista ds.
Kontroli Rachunkowej
Ksiąg

Temat: pomoc w projekcie w proramie "R"

Witam, mam do zrobienia projekt. Dane do tego projektu (fragment tabeli poniżej):

row.names Aktywo Zero Data Godzina Cena Ilość
1 1079618 1 0 20081002 90001 52.50 4675
2 1079619 2 0 20081002 90002 52.50 152
3 1079620 3 0 20081002 90005 52.50 12
4 1079621 4 0 20081002 90006 52.45 218
5 1079622 5 0 20081002 90011 52.50 29
6 1079623 6 0 20081002 90018 52.50 50
7 1079624 7 0 20081002 90028 52.50 24
8 1079625 8 0 20081002 90056 52.40 30
9 1079626 9 0 20081002 90102 52.45 179
10 1079627 10 0 20081002 90108 52.30 100
11 1079628 11 0 20081002 90134 52.20 300
12 1079629 12 0 20081002 90139 52.20 290
13 1079630 13 0 20081002 90141 52.40 100
14 1079631 14 0 20081002 90145 52.40 90
15 1079632 15 0 20081002 90216 52.25 600


Chodzi o to, żeby cały przedział czasowy podzielić na przedziały co 5 min i z każdego takiego przedziału wypisać pierwsze notowanie jakie występuje (jak nie występuje, to wpisać -5). Przedziały czasowe są zatem postaci:
[09:00:00 , 09:04:59) , [09:05:00 , 09:09:59) aż do [15:55:00, 16:00:00]. Z każdego takiego przedziału muszę wybrać pierwszą wartość odpowiadającej mu $Ceny, czyli :

Czyli (dla przedziału co 5 min), jeżeli mam:

Godzina Cena

90612 30,21
90624 30,34
90634 34,25
90713 21,17
90959 39,14
91503 29,17

To powinnam dostać coś takiego:

90000 -5 (bo nie ma godziny z przedziału [9:00:00, 9:04:59)
90500 30,21 (bo pierwszą godziną w przedziale [9:05:00, 9:09:59) jest 90612 a dla niej jest notowanie 30,21)
91000 -5
91500 29,17. Itd.

kolega podpowiedział mi, że dobrym pomysłem byłoby podzielenie wartości Godzina na 500 i wzięcie części całkowitej z tych danych:

90612 30,21
90624 30,34
90634 34,25
90713 21,17
90959 39,14
91503 29,17

otrzymujemy :

godziny, cena:
181 30,21
181 30,34
181 34,25
182 21,17
182 39,14
182 29,17

a poźniej "przejść" po całej tablicy i wybrać tylko po jednej wartości dal danej godziny. Byloby to dość łatwe, gdybym operowała tylko na jednym dniu... bo pewnie zastosowałabym komendę unique() , ale wiem, po dla dnia 20081002 mam serię {181,182,...320} , ale również dla następnego dnia mam taką samą serię danych. Zapewne trzeba zastosować jakąć pętlę, ale jaką i jak jej użyć do wszystkich dni? jak wstawić wartość {-5} gdy np nie będzie wartości np dla godziny 183?

Proszę o pomoc i wytłumaczenie jak "ciemnej masie", gdyż dopiero rozpoczęłam przygodę z "R" i nie jestem obeznana w komendach, a programować nigdy nie lubiłam ;/Barbara Ciepiela edytował(a) ten post dnia 24.03.12 o godzinie 16:55