Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: sample w R

Witam czy ktos wie jak ze zbioru danych powycigac dowolne wiersze.
Mam zbior danych w ktorych pierwsza kolumna to ID (numer pacjenta), druga kolumna to grupa (A lub B) i kolejne kolumny to zmienne.
W zbiorze tym jeden pacjent jest pare razy wiec jest pare takich samych ID, tylko pacjent moze byc w grupie A lub B lub moze byc i w A i w B.
Przykladowo to bedzie:
ID Group Zmienne...
1 A
1 B
2 B
2 B
2 A
3 A
3 A

Potrzebuje stworzyc zbior gdzie pacjent wystepuje tylko raz, czyli poprostu random sample zeby wziasc dla kazdego pacjenta w kazdej grupie, czyli cos takiego:
1 A
1B
2 B
2 A
3 A
Czy ktos moze mi pomoc z tym?

Temat: sample w R

Rozumiem, że w powtórzonych (w obrębie ID+Group) wierszach wszystkie informacje są takie same, więc bez różnicy, które zostaną usunięte w procesie "czyszczenia"?

Może tak?
 > a
ID Group Data
1 1 A 234
2 1 B 543
3 2 B 456
4 2 B 456
5 2 A 532
6 3 A 436
7 3 A 436

> unique(a)
ID Group Data
1 1 A 234
2 1 B 543
3 2 B 456
5 2 A 532
6 3 A 436


PS: Ponieważ unique działa na wszystkich kolumnach, w przypadku dużych zbiorów danych można to zoptymalizować, zawężając sprawdzanie tylko do wskazanych kolumn (pod warunkiem, że wiersze nie mają nazw):
> a[ as.integer( rownames( unique( a[, c("ID", "Group")] ))), ]
ID Group Data
1 1 A 234
2 1 B 543
3 2 B 456
5 2 A 532
6 3 A 436
Adrian Olszewski edytował(a) ten post dnia 10.04.13 o godzinie 17:30
Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: sample w R

Adrian wielkie dzieki za odpowiedz, tylko jak mozesz to prosze o modyfikacje. Niestety nie kazdy wiersz jest taki sam, wlasciwie kazdy wiersz jest inny, wiec nie moge pozostawic tylko pierwszych wierszy. Potrzebuje random sample. Musze przetestowac moja metode na 100 roznych zbiorach danych, wiec jesli umiesz mi pomoc, to prosze cie o zrobienie takiej funkcji zeby za kazdym razem wybieralo inny zestaw pacjentow. Ja myslalam ze moze skorzystac z "sample", ale w sumie to nie wiem jak. Bede wdzieczna za pomoc

Temat: sample w R

Przykładowe rozwiązanie:

 > a
ID Group Var1 Var2
1 1 A 10 a
2 1 B 20 b
3 2 B 30 c
4 2 B 40 d
5 2 A 50 e
6 3 A 60 f
7 3 A 70 g

# tworzymy funkcję, która:
# 1. do tabeli z danymi dodaje kolumnę z kombinacją wartości atrybutów ID i Group
# 2. tworzy nam zmienną b o takim schemacie jak źródło danych src
# 3. dla każdej unikalnej kombinacji ID i Group...
# 4. z tabeli źródłowej src wybierane są pasujące do niej wiersze i zapisywane do zm. tmp
# 5. ze zmiennej tmp losowany jest jeden wiersz i doklejany do zmiennej wynikowej b

MySample <- function(src) {
src <- cbind(combID=paste(src[, "ID"], src[, "Group"]), src)

b <- src[0, ]
for(i in unique(src[, "combID"])) {
tmp <- src[src$combID==i,];
b<-rbind(b, tmp[ round( runif(1, 1, nrow(tmp) ) ), ]);
}
b
}

# testy - zwróć uwagę, że dla kombinacji 2B i 3A, które są wielokrotne, wybierane są różne wiersze, a więc - działa.

> MySample(a)
combID ID Group Var1 Var2
1 1 A 1 A 10 a
2 1 B 1 B 20 b
3 2 B 2 B 30 c
5 2 A 2 A 50 e
6 3 A 3 A 60 f
> MySample(a)
combID ID Group Var1 Var2
1 1 A 1 A 10 a
2 1 B 1 B 20 b
3 2 B 2 B 30 c
5 2 A 2 A 50 e
7 3 A 3 A 70 g
> MySample(a)
combID ID Group Var1 Var2
1 1 A 1 A 10 a
2 1 B 1 B 20 b
4 2 B 2 B 40 d
5 2 A 2 A 50 e
7 3 A 3 A 70 g
Adrian Olszewski edytował(a) ten post dnia 10.04.13 o godzinie 19:31
Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: sample w R

Adrian dzieki wielkie! nie znam tylko tego runif, czy moge zastapic ta linijke:
b<-rbind(b, tmp[ round( runif(1, 1, nrow(tmp) ) ), ]);
takim czyms:
b<-rbind(b, tmp[sample(nrow(tmp),1),]);
to powinno dawac taki sam rezultat?

Czy moglbys mi pomoc jeszcze w takiej kwesti zeby ta operacja byla powtarzana ze 100 razy.

Moj program wyglada tak:
pdf(file='analysis.pdf') #zapisuje do pdfa wykresy jakie sa wynikiem funkcji myfun
par(mfrow=c(2,2));
apply(m, 1, myfun);
dev.off()

w funkcji myfun uzywam wlasnie zbioru danych a

Teraz moge zrobic MySample(a) i otrzymuje rozne zbiory danych i moge uzyc je w moim programie, ale jak zrobic zeby to bylo wykonane automatycznie 100razy.
Bede wdzieczna jak bedziesz umial mi pomoc.

Następna dyskusja:

sample clearing




Wyślij zaproszenie do