我在 R 中有一个以下形式的数据框:
BC solvopt istrng tSolv EPB
1 10 1 0 0.10 -78.1450
2 10 1 1 0.15 -78.7174
3 10 1 10 0.14 -78.7175
4 10 1 100 0.12 -78.7184
5 10 1 1000 0.09 -78.7232
6 10 1 2 0.15 -78.7175
7 10 1 20 0.14 -78.7176
8 10 1 200 0.12 -78.7192
30 10 2 0 0.10 -78.1450
31 10 2 1 0.11 -78.7174
32 10 2 10 0.11 -78.7175
33 10 2 100 0.10 -78.7184
34 10 2 1000 0.13 -78.7232
35 10 2 2 0.11 -78.7174
36 10 2 20 0.10 -78.7176
37 10 2 200 0.10 -78.7192
59 10 3 0 0.16 -78.1450
60 10 3 1 0.23 -78.7174
61 10 3 10 0.21 -78.7175
62 10 3 100 0.19 -78.7184
63 10 3 1000 0.17 -78.7232
64 10 3 2 0.22 -78.7175
65 10 3 20 0.21 -78.7176
66 10 3 200 0.18 -78.7192
88 10 4 0 0.44 -78.1450
89 10 4 1 14.48 -78.7162
90 10 4 10 12.27 -78.7175
91 10 4 100 1.23 -78.7184
92 10 4 1000 0.44 -78.7232
93 10 4 2 14.52 -78.7172
94 10 4 20 6.16 -78.7176
95 10 4 200 0.62 -78.7192
我想在此框架中添加一列,该列显示 EPB 中 BC 和 istrng 的每个值相对于 solvopt=3 的相对误差。
例如,要计算每行 EPB 的相对差异,我将减去具有相同 BC 和 istrng 值但 solvopt=3 的相应行的 EPB 值。
有没有一种简单的方法可以做到这一点,只需将其分成多个数据帧(针对每个求解器),然后重新组合在一起?
最终目标是使用 qplot 为 BC 的每个值生成相对误差与 istrng 的关系图。
最佳答案
如果您将 solvopt==3
的子集与 BC
和 istrong
上的主要数据进行合并
,然后减去差值,您应该得到您想要的结果,例如:
newdat <- merge(dat,dat[dat$solvopt==3,c("BC","istrng","EPB")], by=c("BC","istrng"))
newdat$diff <- with(newdat, EPB.x - EPB.y)
...或者使用匹配
和交互
一次性完成所有操作:
dat$diff <- dat$EPB - dat[dat$solvopt==3,"EPB"][match(
with(dat, interaction(BC,istrng) ),
with(dat[dat$solvopt==3,], interaction(BC,istrng) )
)]
关于r - 计算与 R 数据框中特定因素相关的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811187/