1

我是 R 中 data.table 的菜鸟,我想在此示例中跳过 z=3 的最后一个值:

> DT = data.table(y=c(1,1,2,2,2,3,3,3,4,4),x=1:10,z=c(1,1,1,1,2,2,2,2,3,3))
> DT[,list(list(predict(smooth.spline(x,y),c(4,5,6))$y)),by=z]

Error in smooth.spline(x, y) : need at least four unique 'x' values

如果我只是删除 z=3 我会得到我想要的答案:

> DT = data.table(y=c(1,1,2,2,2,3,3,3),x=1:8,z=c(1,1,1,1,2,2,2,2))
> DT[,list(list(predict(smooth.spline(x,y),c(4,5,6))$y)),by=z]

   z                                                  V1
1: 1  2.09999998977689,2.49999997903384,2.89999996829078
2: 2 0.999895853971133,2.04533519691888,2.90932467439562

多么棒的包裹啊!

4

2 回答 2

3

省略行z是 3 就像

DT[z!=3,  <whatever expression you'd like>]

如果您的 data.table 被键入,z那么您可以使用

DT[!.(3), .....]
于 2013-08-01T17:15:39.403 回答
1

如果您只是想在 时省略结果.N <4,那么您可以使用if(not ifelse)。如果.N <4,则不返回任何内容

DT[,if(.N>=4){ list(list(predict(smooth.spline(x,y),c(4,5,6))$y))},by=z]
#    z                                                  V1
# 1: 1   2.1000000266026,2.50000003412706,2.90000004165153
# 2: 2 0.999895884129996,2.04533520266699,2.90932466433092
于 2013-08-02T00:12:50.930 回答