目前,此代码可以执行我想要执行的操作,其中dx $ res是一个向量,从dx $ val1或dx $ val2中选择值,具体取决于dx $ x0的值。
x0<-c(1,2,1,2,2,1)
val1<-c(8,6,4,5,3,2)
val2<-c(4,8,6,7,9,5)
dx<-data.frame(x0,val1,val2)
dx$res<-(dx$x0==1)*dx$val1+(dx$x0==2)*dx$val2
我想知道是否有更优雅的方法来执行此操作,例如使用apply函数。
答案 0 :(得分:1)
一个选项是model.matrix
rowSums
。对于&#39; n&#39;它也更通用。 &#39; x0&#39;中不同元素的数量列。
dx$res <- rowSums(dx[-1]*model.matrix(~ factor(x0) - 1 , dx))
dx$res
#[1] 8 8 4 7 9 2