这是我想做的事情的要点:
我有 2 个数据框:
x(id 是唯一的)
id timestamp
282462839 2012-12-05 10:55:00
282462992 2012-12-05 12:08:00
282462740 2012-12-05 12:13:00
282462999 2012-12-05 12:48:00
y(id 不是唯一的)
id value1 value2
282462839 300 100
282462839 300 200
282462839 400 300
282462999 500 400
282462999 300 150
我还有一个函数 myfunc(id,pvalue) 计算一些东西并根据 pvalue 和其他 value1s 返回 value2 值之一(比 pvalue==value1 更复杂)
我想为 x 创建一个包含相应计算的 myfunc(id,pvalue) 的第三列,其中 pvalue 是一个常量整数(比如 20)。
所以本质上,我想这样做:
x$t20 <- myfunc(x$id,20)
我尝试以这种方式使用 lappy 和 sapply:
x$t20 <- sapply(as.vector(x$id),myfunc,pvalue=20)
我尝试使用 lapply 并且也没有使用 as.vector,但我一直收到此错误:
Error in .pointsToMatrix(p2) : Wrong length for a vector, should be 2
当我给出它只是在 $t20 中复制 $id 的意思时,它就起作用了。
我该怎么做呢?
编辑 1:这是 myfunc 的骨架:
myfunc <- function(xid,pvalue) {
result <- subset(y,id==xid)
retVal <- -1
if(nrow(result) < 12){
return(NaN)
}
for(i in (1:nrow(result))){
#code to process result
}
return(retVal)
}