Jak mogę użyć apply
lub powiązanej funkcji do utworzenia nowej ramki danych, która zawiera wyniki średnich rzędów dla każdej pary kolumn w bardzo dużej ramce danych?stosuje funkcję nad grupami kolumn
Mam instrument, który przekazuje n
powtórzenie pomiarów na dużej liczbie próbek, gdzie każdy pojedynczy pomiar jest wektorem (wszystkie pomiary są wektorami tej samej długości). Chciałbym obliczyć średnią (i inne statystyki) we wszystkich powtórzeniach pomiarów dla każdej próbki. Oznacza to, że muszę pogrupować kolejno następujące po sobie kolumny i wykonać obliczenia wierszowe.
przypadku prostego przykładu, z trzech powtórzonych pomiarów na dwóch próbkach, w jaki sposób można zakończyć się z ramką danych, który ma dwie kolumny (po jednym na próbkę), z których jedna jest średnią dla każdego rzędu powtórzenia w dat$a
, dat$b
i dat$c
i jeden, który jest średnią z każdego rzędu dla dat$d
, dat$e
i dat$f
.
Oto przykładowe dane
dat <- data.frame(a = rnorm(16), b = rnorm(16), c = rnorm(16), d = rnorm(16), e = rnorm(16), f = rnorm(16))
a b c d e f
1 -0.9089594 -0.8144765 0.872691548 0.4051094 -0.09705234 -1.5100709
2 0.7993102 0.3243804 0.394560355 0.6646588 0.91033497 2.2504104
3 0.2963102 -0.2911078 -0.243723116 1.0661698 -0.89747522 -0.8455833
4 -0.4311512 -0.5997466 -0.545381175 0.3495578 0.38359390 0.4999425
5 -0.4955802 1.8949285 -0.266580411 1.2773987 -0.79373386 -1.8664651
6 1.0957793 -0.3326867 -1.116623982 -0.8584253 0.83704172 1.8368212
7 -0.2529444 0.5792413 -0.001950741 0.2661068 1.17515099 0.4875377
8 1.2560402 0.1354533 1.440160168 -2.1295397 2.05025701 1.0377283
9 0.8123061 0.4453768 1.598246016 0.7146553 -1.09476532 0.0600665
10 0.1084029 -0.4934862 -0.584671816 -0.8096653 1.54466019 -1.8117459
11 -0.8152812 0.9494620 0.100909570 1.5944528 1.56724269 0.6839954
12 0.3130357 2.6245864 1.750448404 -0.7494403 1.06055267 1.0358267
13 1.1976817 -1.2110708 0.719397607 -0.2690107 0.83364274 -0.6895936
14 -2.1860098 -0.8488031 -0.302743475 -0.7348443 0.34302096 -0.8024803
15 0.2361756 0.6773727 1.279737692 0.8742478 -0.03064782 -0.4874172
16 -1.5634527 -0.8276335 0.753090683 2.0394865 0.79006103 0.5704210
jestem po coś takiego
X1 X2
1 -0.28358147 -0.40067128
2 0.50608365 1.27513471
3 -0.07950691 -0.22562957
4 -0.52542633 0.41103139
5 0.37758930 -0.46093340
6 -0.11784382 0.60514586
7 0.10811540 0.64293184
8 0.94388455 0.31948189
9 0.95197629 -0.10668118
10 -0.32325169 -0.35891702
11 0.07836345 1.28189698
12 1.56269017 0.44897971
13 0.23533617 -0.04165384
14 -1.11251880 -0.39810121
15 0.73109533 0.11872758
16 -0.54599850 1.13332286
który zrobiłem z tym, ale to oczywiście nie jest dobre dla mojego znacznie większej ramki danych ...
data.frame(cbind(
apply(cbind(dat$a, dat$b, dat$c), 1, mean),
apply(cbind(dat$d, dat$e, dat$f), 1, mean)
))
Próbowałem apply
i pętli i nie całkiem mogę go połączyć. Moje rzeczywiste dane mają setki kolumn.
Czy zawsze co trzy kolumny? Czy karmisz wektor wektorów nazw lub wektor wektora indeksów? Jeśli odpowiedź użytkownika user1317221_G nie jest tym, czego szukasz, być może musisz podać więcej informacji. –
Dla potomności powyższe pytanie wydaje się być transpozycją tego nowszego pytania na temat stosowania funkcji do grup wierszy (i ma różne podejścia): http://stackoverflow.com/q/10837258/1036500 – Ben