0

这是我想做的事情的要点:

我有 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)
}
4

1 回答 1

1

如果没有完整的代码,很难提供帮助,但这里有一些提示。首先你可以得到应该处理的id的逻辑向量,然后使用向量化的ifelse语句。

tmp <- table(y$id) >= 12
y$t20 <- ifelse(tmp[as.character(y$id)], your_new_func(), NaN)
于 2013-06-05T07:45:19.680 回答