【问题标题】:How to find the normalized values within each level of a variable in R如何在R中的变量的每个级别内找到归一化值
【发布时间】:2023-03-14 23:05:01
【问题描述】:

我有一个分类变量 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)

【问题讨论】:

  • 看起来你想对 A 中的值应用某个函数,具体取决于 B 的值。对吗?
  • 是的,米奇,我想将 A 的值标准化为对应于 B 的级别。就像我说的那样,如果您注意到,每个级别都会有不同的最小值和最大值。我想为整个 A 创建一个具有此类标准化值的新变量。

标签: r normalization


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    你可以使用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))
    

    不完全确定您想要的输出,但这应该是一个不错的起点。

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 2015-11-26
      • 2021-09-23
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多