Temat: problem z replikacją danych
Funkcja Michała przyjmuje dwa parametry: nazwę ramki i nazwę kolumny w tej ramce, w której znajdują się licz(eb)ności poszczególnych grup.
W pierwszym i drugim kroku sprawdzane jest, czy w ramce jest wspomniana kolumna z licznościami - i jeśli jest, pobierany jest jej indeks (numer). Numer ten zapisywany jest w zmiennej vind (variable index? :) ).
Gdyby zmiennej o zadanej nazwie nie było (np. literówka w nazwie), wyrażenie zwróci "NA" (not available), co wykryje druga linijka i zakończy działanie funkcji.
Jeśli wszystko jest OK, trzecia linijka "czyni" następujące rzeczy:
1. Generuje ciąg liczb od 1 do
liczba wierszy w ramce powtórzonych tyle razy, ile wskazują kolejne elementy wektora
Zgrupowane[,vind].
Ponieważ każdy wiersz ramki to u Ciebie osobna grupa, więc de facto otrzymujesz indeksy grup, powielone tyle, na ile wskazuje zawartość kolumny z liczebnościami.
> vind # tutaj zapisany jest indeks kolumny z liczebnościami
[1] 1
> Zgrupowane[,vind]
[1] 6 4
> rep(1:nrow(Zgrupowane), Zgrupowane[,vind])
[1] 1 1 1 1 1 1 2 2 2 2
2. Uzyskanymi "indeksami grup" indeksuje wiersze w ramce, jednocześnie wymuszając ich powielenie (wybierz: "pierwszą grupę, pierwszą grupę, pierwszą grupę..... drugą grupę, drugą grupę..."). Dodatkowo wybiera wszystkie kolumny z pominięciem zbędnej kolumny z liczebnościami.
Reasumując - zakładając, że masz ramkę taką, jak pokazałeś w swoim przykładzie (musi mieć jedną kolumnę z liczebnościami i dowolną liczbę kolumn z danymi):
Ilosc_wystapien, wartosc1, wartosc2.
6____________________nie______A
4____________________tak______B
podajesz właśnie tę ramkę oraz nazwę kolumny "Ilosc_wystapien" jako drugi argument.
> rozgrupuj2(dane, "Ilosc_wystapien")
Adrian Olszewski edytował(a) ten post dnia 08.02.10 o godzinie 15:51