计算与R数据帧中特定因子相关的值
我在R中有一个数据帧,其形式如下:计算与R数据帧中特定因子相关的值,r,dataframe,R,Dataframe,我在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
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的相对差异,我将减去相应行的EPB值,该行的BC和istrng值相同,但solvopt=3
除了将其拆分为多个数据帧(针对每个solvopt)然后将其重新排列在一起之外,有没有一种简单的方法可以做到这一点
最终目标是使用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)
与data.table类似的选项
library(data.table)
res <- setkey(setDT(dat), BC,istrng)[dat[solvopt==3, c(1,3,5),
with=FALSE]][, diff:= EPB- i.EPB][]
库(data.table)
res我想我得到了你想要的,但是你能让你的示例数据有两个案例,用于solvopt=3
这样就可以提供一个完整的解决方案吗?太棒了,它们工作起来很有魅力。我以前从未玩过合并或匹配+交互。这比拆分成几个帧并手动添加要容易得多。谢谢@wmsmith-没问题。我认为R的秘密不是试图以for(in n中的I)
逐段循环的方式思考,而是找到一个“块”解决方案,它将一次性完成核心操作。这是许多其他语言的一种思维方式的改变。
library(data.table)
res <- setkey(setDT(dat), BC,istrng)[dat[solvopt==3, c(1,3,5),
with=FALSE]][, diff:= EPB- i.EPB][]