R - нормализовать значения (на основе некоторых значений) - PullRequest
0 голосов
/ 14 января 2020

Я хочу нормализовать данные в R, но не в определенном c диапазоне (например, от 0 до 1). У меня есть таблица, подобная следующей:

 benchmark  |   technique     | ipc
correlation | no_compression  | 0.5
correlation | compression-bdi | 0.6
  trisolv   | no_compression  | 0.6
  trisolv   | compression-bdi | 0.7

Я хочу, чтобы значение IP C no_compression для каждого бенчмарка равнялось 1. Остальные методы для конкретного c бенчмарка будут основываться на этом no_compression ценность. Так, например, значение IP C для сжатия-bdi для корреляции будет равно 1,2.

Можно ли использовать какую-либо функцию? Я могу только найти упоминания о нормализации до определенного диапазона.

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Используя dplyr:

df %>% 
  group_by(benchmark) %>% 
  mutate(ipc_standardized = ipc / ipc[technique == 'no_compression'])
# A tibble: 4 x 4
# Groups:   benchmark [2]
  benchmark   technique         ipc ipc_standardized
  <chr>       <chr>           <dbl>            <dbl>
1 correlation no_compression    0.5             1   
2 correlation compression-bdi   0.6             1.2 
3 trisolv     no_compression    0.6             1   
4 trisolv     compression-bdi   0.7             1.17

Или используя базу R:

df$ipc_standarized <- unlist(lapply(
  split(df, df$benchmark), 
  function(.) .$ipc / .$ipc[.$technique == 'no_compression'])
)
0 голосов
/ 14 января 2020

Вы также можете использовать match, который возвращает индекс первого соответствия, чтобы найти "no_compression" technique

library(dplyr)

df %>%
   group_by(benchmark) %>%
   mutate(ipc = ipc/ipc[match('no_compression', technique)])

#  benchmark   technique         ipc
#  <fct>       <fct>           <dbl>
#1 correlation no_compression   1   
#2 correlation compression-bdi  1.2 
#3 trisolv     no_compression   1   
#4 trisolv     compression-bdi  1.17

Используя data.table, что будет

library(data.table)
setDT(df)[, ipc := ipc/ipc[match('no_compression', technique)], benchmark]
...