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
-------------------------------
Run Code Online (Sandbox Code Playgroud)
说我有一张这样的桌子。对于每种类型的“度量”,我想使用“原始”中的值对“值”进行标准化。这样结果看起来像。追加名为“ 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
-------------------------------
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。
使用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
Run Code Online (Sandbox Code Playgroud)
和相同的想法base R:
with(df, value/ave((ID == "original") * value, measure, FUN = max))
Run Code Online (Sandbox Code Playgroud)