如何在R中的变量的每个级别中找到规范化值
我有一个分类变量B,有3个级别1,2,3,还有一个变量a,有一些值。。样本数据如下如何在R中的变量的每个级别中找到规范化值,r,normalization,R,Normalization,我有一个分类变量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)您可以使用tapply函数: x = read.tab
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)您可以使用
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))
不完全确定您想要如何输出,但这应该是一个不错的起点。使用
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
#一个tible:21x3
#组别:B[3]
A、B、C
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
# ... 还有11行
a中的值似乎需要应用某个函数,具体取决于B的值。是否正确?是的,mickey,我想标准化a的值,对应于B的级别。正如我所说,如果您注意到,每个级别都会有不同的最小值和最大值。我想为整个a创建一个新变量,该变量具有这样的标准化值。