我有以下数据框
df <- data.frame(
Type=rep(LETTERS[1:6],3),
Level=rep(1:3,each=6),
Value=1:18)
我想添加2列,
- 添加 'r1',Value 与同一级别的 Type A 值的比率
- 添加 'r2',Value 与同一类型的 Level 1 值的比率
以结束
> 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
.