假设我有以下Dataframe(可重现的示例如下):
DF <- data.frame(ID=c(12345,12345,13425),NumTrans=c("1-2","2-3","1-3"),Cov1=c(1500,1000,2000),cov2=c(1,0,1))
字段NumTrans表示状态之间的转换:主题12345,例如,状态1和2之间的转换,依此类推。 编写函数&#34; func&#34;如下,
func=function(x){
a=paste0("exp(",x[1],"*x","+",x[2],"*y)")
return(a)
}
允许您将每个ID与输出exp的表达式相关联(Cov1 * x1 + Cov2 * y):
by(DF[3:4],DF[1],func)
ID: 12345
[1] "exp(c(1500, 1000)*x+c(1, 0)*y)"
-----------------------------------------
ID: 13425
[1] "exp(2000*x+1*y)"
但是,我需要的是略有不同。
1)有没有办法修改这个功能,以便在&#34; * x&#34;和&#34; * y&#34;你取而代之的是#34; * x_NumTrans&#34;和&#34; * y_NumTrans&#34;,其中 NumTrans是那一行的NumTrans吗?
2)是否可以编写一个返回此输出但等于行数的函数?
换句话说,所需的输出类似于:
[1] "exp(c(1500, 1000)*x_1-2+c(1, 0)*y_1-2)"
----------------------------------------------
[2] "exp(c(1500, 1000)*x_2-3+c(1, 0)*y_2-3)"
----------------------------------------------
[3] "exp(2000*x_1-3+1*y_1-3)"
----------------------------------------------
甚至更好,一个解决方案,将每个表达式放在一个可以附加到DF ...
的列中非常感谢提前!
答案 0 :(得分:1)
您可以按照以下方式执行此操作。分为两个部分。第一个用于c(*,*)
的用户,然后使用NumTrans
byAns <- by(DF[2:4], DF[1], function(x) {
s1 <- paste0("exp(", x[2], "*x_")
s2 <- paste0("+", x[3], "*y_")
paste0(s1, x[[1]], s2, x[[1]], ")")
})