gpt4 book ai didi

r - 基于其他两个值对向量进行归一化

转载 作者:行者123 更新时间:2023-12-01 12:47:56 25 4
gpt4 key购买 nike

我有以下数据框

df <- data.frame(
Type=rep(LETTERS[1:6],3),
Level=rep(1:3,each=6),
Value=1:18)

我想添加 2 列,

  • 添加'r1',值(value)与同一级别的A类值(value)的比率
  • 添加'r2',Value 与同一类型的 Level 1 Value 的比率

结束

> df
Type Level Value r1 r2
1 A 1 1 1.000000 1.0
2 B 1 2 2.000000 1.0
3 C 1 3 3.000000 1.0
4 D 1 4 4.000000 1.0
5 E 1 5 5.000000 1.0
6 F 1 6 6.000000 1.0
7 A 2 7 1.000000 7.0
8 B 2 8 1.142857 4.0
9 C 2 9 1.285714 3.0
10 D 2 10 1.428571 2.5
11 E 2 11 1.571429 2.2
12 F 2 12 1.714286 2.0
13 A 3 13 1.000000 13.0
14 B 3 14 1.076923 7.0
15 C 3 15 1.153846 5.0
16 D 3 16 1.230769 4.0
17 E 3 17 1.307692 3.4
18 F 3 18 1.384615 3.0

我尝试了一些 apply 类型的方法,但无法得到它。我最终得到了一个双 for 循环:

for(i in unique(df$Type)) {
for(j in unique(df$Level)) {
df$r1[df$Level==j & df$Type==i] <- df$Value[df$Level==j & df$Type==i]/df$Value[df$Level==j & df$Type=="A"]
df$r2[df$Level==j & df$Type==i] <- df$Value[df$Level==j & df$Type==i]/df$Value[df$Level==1 & df$Type==i]
}
}

这还不算太糟糕,但我想知道是否有一种拆分-应用-组合的方法可以做到这一点,也许可以在 plyr 中使用一些东西。

最佳答案

由于您提出了一个 plyr 解决方案:

df <- ddply(df, .(Level), transform, r1 = Value / Value[Type == "A"])
df <- ddply(df, .(Type), transform, r2 = Value / Value[Level == 1])

我觉得读起来很好。

关于r - 基于其他两个值对向量进行归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com