假设一个数据帧具有以下结构:乘法与条件
x=c(1:18)
y=c(9:26)
k=c(NA)
id=c(1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3)
task=c(1,1,2,2,2,3,3,1,1,1,2,2,2,1,1,2,2,2)
alts=c(2,3,1,2,3,1,3,1,2,3,1,2,3,1,2,1,2,3)
data<-data.frame(id, task, alts, x, y, k)
现在我想乘x和y具有不同的条件,即,
- 当ID == i和任务= = j,prod(x);
- 当id ==我和任务!= j,prod(y);
- 当id ==我,prod(y)。
then k = prod(x)* prod(y)/(1- prod(y))。这个方程中的第一个产品(y)来自条件2,第二个产品(y)来自条件3.
作为一个例子,假设我想计算k [1](意味着id == 1,任务== 1),则k [1] =(x [1] * x [2])*(y [3] * y [4] * y [5] * y [6] * y [7]) /(1-y [1] * y [2] * ... * y [7])。因为数据中的k [2]也表示id == 1和task == 1的条件,所以k [2] = k [1]。
我使用的代码是:
for (i in 1:3){ # for each individual
for(j in 1:3){ # for each task of each individual
data1=ddply(data, .(id, task), transform, k=prod(x[id==i & task==j])*prod(y[id==i & task!=j])/(1-prod(y[id==i])))
}
}
我尝试这样的代码,但没有奏效。为什么功能prod(x-condition 1)* prod(y-condition 2)/ prod(y-condition 3)不起作用?有人可以帮我吗?
你能澄清你正在做什么计算?给一些描述你最终结果的伪代码会很有帮助。 如果我正确解释你的问题,你的目标是计算:foreach id和任务组合:计算prod(x为这个id和任务组合)* prod(y为这个id,但不是这个任务)/(1 - Prod(y为这个id))。 这是正确的吗? – leif
是的!你是对的!这就是我想要做的。此计算以列数据结束,以便每个ID和任务组合具有唯一的计算值。 – Chen