【问题标题】:how to normalize the values in one column for each type defined in another column如何为另一列中定义的每种类型标准化一列中的值
【发布时间】:2019-11-21 06:16:36
【问题描述】:
BEFORE
-------------------------------
ID            measure     value
-------------------------------
original      weight      120.0
variant1      weight      110.0
variant2      weight       78.0
variant3      weight      140.0
original      speed        56.0
variant1      speed        54.0
variant2      speed        56.0
variant3      speed        61.0
original      height        6.7
variant1      height        6.3
variant2      height        4.5
variant3      height        5.3
-------------------------------

说我有一张这样的桌子。对于每种类型的“度量”,我想用“原始”中的值对“值”进行标准化。所以结果看起来像。追加名为“norm_value”的新列

AFTER
------------------------------------
ID            measure     norm_value
------------------------------------
original      weight       1.0
variant1      weight       0.91
variant2      weight       0.65
variant3      weight       1.16
original      speed        1.0
variant1      speed        0.96
variant2      speed        1.0
variant3      speed        1.08
original      height       1.0
variant1      height       0.94
variant2      height       0.67
variant3      height       0.79
-------------------------------

非常感谢任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    dplyr,你可以试试:

    df %>%
     group_by(measure) %>%
     mutate(norm_value = value/value[ID == "original"])
    
       ID       measure value norm_value
       <chr>    <chr>   <dbl>      <dbl>
     1 original weight  120        1    
     2 variant1 weight  110        0.917
     3 variant2 weight   78        0.65 
     4 variant3 weight  140        1.17 
     5 original speed    56        1    
     6 variant1 speed    54        0.964
     7 variant2 speed    56        1    
     8 variant3 speed    61        1.09 
     9 original height    6.7      1    
    10 variant1 height    6.3      0.940
    11 variant2 height    4.5      0.672
    12 variant3 height    5.3      0.791
    

    base R 的想法相同:

    with(df, value/ave((ID == "original") * value, measure, FUN = max))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多