Как найти нормализованные значения в пределах каждого уровня переменной в R - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть категориальная переменная B с 3 уровнями 1,2,3, а также у меня есть другая переменная A с некоторыми значениями. Пример данных выглядит следующим образом

A   B
22  1
23  1
12  1
34  1
43  2
47  2
49  2
65  2
68  3
70  3
75  3
82  3
120 3
.   .   
.   .   
.   .
.   .

Все, что я хочу, это сказать для каждого уровняиз B (скажем, в 1) мне нужно рассчитать Val (A) -Min / Max-Min, аналогично мне нужно воспроизвести то же самое для других уровней (2 и 3)

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Решение с использованием dplyr:

set.seed(1)
df=data.frame(A=round(rnorm(21,50,10)),B=rep(1:3,each=7))
library(dplyr)
df %>% group_by(B) %>% mutate(C= (A-min(A))/(max(A)-min(A)))

Выходной сигнал подобен

# A tibble: 21 x 3
# Groups:   B [3]
       A     B      C
   <dbl> <int>  <dbl>
 1    44     1 0.0833
 2    52     1 0.417 
 3    42     1 0     
 4    66     1 1     
 5    53     1 0.458 
 6    42     1 0     
 7    55     1 0.542 
 8    57     2 0.784 
 9    56     2 0.757 
10    47     2 0.514 
# ... with 11 more rows
0 голосов
/ 06 декабря 2018

Вы можете использовать функцию tapply:

x = read.table(text="A   B
22  1
23  1
12  1
34  1
43  2
47  2
49  2
65  2
68  3
70  3
75  3
82  3
120 3", header = TRUE)

y = tapply(x$A, x$B, function(z) (z - min(z)) / (max(z) - min(z)))

# Or using the scale() function
#y = tapply(x$A, x$B, function(z) scale(z, min(z), max(z) - min(z)))

cbind(x, unlist(y))

Не совсем уверен, как вы хотите вывод, но это должно быть достойной отправной точкой.

...