(Niestety, brakuje mi podstawowego słownictwa, aby sformułować moje pytanie, więc proszę poprawić mi, gdzie bardziej precyzyjne terminy są przydatne.)Jak obliczyć stosunek punktów danych, tj. Połączyć je w oparciu o pewne kryterium?
Używam R do wykonywania bardzo podstawowych statystycznych analiz wyników benchmarków maszyn wirtualnych, a także często chcę znormalizować moje dane w oparciu o pewne kryterium.
Obecnie moim problemem jest to, że chciałbym coś jak następuje pracować:
normalized_data <- ddply(bench, ~ Benchmark + Configuration + Approach,
transform,
Ratio = Time/Time[Approach == "appr2"])
Więc, co faktycznie chcę jest obliczenie przyspieszenia pomiędzy odpowiednimi parami pomiarów.
bench
to ramka danych z kolumnami Czas, Benchmark, Konfiguracja i Podejście i zawiera 100 pomiarów dla wszystkich możliwych kombinacji Benchmark, konfiguracji i podejścia. Teraz mam dokładnie dwa podejścia i chcę przyspieszyć "appr2"/"appr1". Tak więc, patrząc tylko na jeden konkretny benchmark i jedną konkretną konfigurację, mam 100 pomiarów dla "appr1" i 100 z "appr2" w mojej ramce danych. Jednak R daje mi następujący błąd wynikający z zapytania podać:
Error in data.frame(list(Time = c(405.73, 342.616, 404.484, 328.742, 403.384, :
arguments imply differing number of rows: 100, 0
Idealnie, wynik mojego zapytania skutkowałoby w nowej ramce danych z trzech kolumn SpeedUp, Benchmark, konfiguracja. Na tej podstawie będę w stanie obliczyć średnie, przedziały ufności i tak dalej.
Ale w tej chwili podstawowym problemem jest sposób wyrażenia takiej normalizacji. Dla innego zestawu danych udało mi się obliczyć znormalizowaną wartość, taką jak ta Time.norm = Time/Time[NumCores == min(NumCores)]
, ale wygląda na to, że działało przez przypadek, przynajmniej nie rozumiem różnicy.
Wszelkie wskazówki są mile widziane. (Zwłaszcza właściwa terminologia do szukania rozwiązań dla takich problemów.)
Edycja: Dzięki wskazówce Chase'a, tutaj minimalny zestaw danych, który powinien być strukturalnie identyczny z tym, który otrzymałem i wykazuje takie samo zachowanie w odniesieniu do powyższe zapytanie.
bench <- structure(list(Time = c(399.04, 388.069, 401.072, 361.646),
Benchmark = structure(c(1L, 1L, 1L, 1L), .Label = c("Fibonacci"), class = "factor"),
Configuration = structure(c(1L, 1L, 1L, 1L), .Label = c("native"), class = "factor"),
Approach = structure(c(1L, 1L, 2L, 2L), .Label = c("appr1", "appr2"), class = "factor")),
.Names = c("Time", "Benchmark", "Configuration", "Approach"),
row.names = c(NA, 4L), class = "data.frame")
Hi smarr - zobacz to pytanie, aby uzyskać porady dotyczące sformułowania dobrego pytania technicznego: http://stackoverflow.com/questions/5963269/how-to-makea-a- świetny-odtwarzalny-przykład. W szczególności spójrz na dodanie 'dput (yourData)' – Chase
Dzięki! Dodałem zestaw danych powyżej. – smarr
Arg, błąd dla początkujących! – smarr