zoo - 将核心数据舍入为整数

zoo - Round coredata to integer

我有一个包含 69 个 zoo 对象的列表,我使用 na.approx 来填补一些空白,但是由于我的时间序列处理计数,所以我需要估算值是整数。

此代码

list_int <- lapply(list_dec, round(coredata(list_dec), digits=0)) 

给我以下错误信息

Error in round(coredata(list_dec), digits=0) : 
  non-numeric argument to mathematical function

我认为将函数应用于列表而不是向量是个问题,但是函数

coredata(list_dec)

正确显示所有 69 个时间序列(不需要 lapply)。

那么为什么 round 不能应用于 coredata

已编辑

这里建议的是最小数据集

 A1 <- runif(20, min=-5, max=13)
 A2 <- runif(20, min=-1, max=5)
 A3 <- runif(20, min=-3, max=10)
 A4 <- runif(20, min=0, max=2)
 ls <- list(A1, A2, A3, A4)
 list_dec <- lapply(ls, as.zoo)

正如评论中所讨论的,您可以通过以下方式完成您想要的:

> library(zoo)
> A1 <- runif(20, min=-5, max=13)
> A2 <- runif(20, min=-1, max=5)
> A3 <- runif(20, min=-3, max=10)
> A4 <- runif(20, min=0, max=2)
> ls <- list(A1, A2, A3, A4)
> list_dec <- lapply(ls, as.zoo)

现在list_dec看起来如下:

> list_dec
[[1]]
          1           2           3           4           5           6           7           8           9          10          11          12          13 
 9.20889929  8.03050882  1.52621137  9.91528049 12.71637959 11.93573340  3.34967427  9.75224030  7.90654714  0.08199464 -2.84403691 11.57990103  4.74868873 
         14          15          16          17          18          19          20 
 2.94023319 10.71812525 -2.05394366 -1.07669056  7.17503613  4.84871327  4.58929978 

[[2]]
         1          2          3          4          5          6          7          8          9         10         11         12         13         14         15 
 1.0756646  0.5615212  0.5697795  0.9629726  2.5962021  3.1932062  0.6894849  1.9844943  1.3351256  4.0043998  0.4756172  0.4573920  0.6009208  4.4963877  4.4149804 
        16         17         18         19         20 
 3.7762369  2.9670795 -0.8241576  2.1796402  2.5504061 

[[3]]
         1          2          3          4          5          6          7          8          9         10         11         12         13         14         15 
 1.5765136  1.7310402  0.7273943  4.0838831 -0.9946958 -2.0222258  7.5756159  3.9105252  3.9006369 -0.9939739  4.7603811  8.5079521  3.3653795  0.8546201  3.8143874 
        16         17         18         19         20 
 5.0847501 -2.6324485  2.0860695  5.7202315  9.5304238 

[[4]]
         1          2          3          4          5          6          7          8          9         10         11         12         13         14         15 
1.36751418 1.44009472 1.41155170 1.55018689 1.31378442 1.09746739 0.09224919 0.66425731 0.61047787 1.63552109 1.56096710 1.59775494 1.69658733 1.08939868 1.96183397 
        16         17         18         19         20 
1.20476936 0.94640977 0.73820689 0.65899943 1.54647028 

现在你可以像这样直接调用lapply:

lapply(list_dec,round)

这会为您提供所需的输出:

[[1]]
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 9  8  2 10 13 12  3 10  8  0 -3 12  5  3 11 -2 -1  7  5  5 

[[2]]
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 1  1  1  1  3  3  1  2  1  4  0  0  1  4  4  4  3 -1  2  3 

[[3]]
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 2  2  1  4 -1 -2  8  4  4 -1  5  9  3  1  4  5 -3  2  6 10 

[[4]]
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 1  1  1  2  1  1  0  1  1  2  2  2  2  1  2  1  1  1  1  2