每组最后一行所需的总和的结果

时间:2019-02-05 11:54:23

标签: r zoo

我正在使用val client = OkHttpClient() val requestBody = FormEncodingBuilder() .add("grant_type", "authorization_code") .add("client_id", "") .add("client_secret", "") .add("redirect_uri", "") .add("code", "yourweb server id) .build() val request = Request.Builder() .url("https://www.googleapis.com/oauth2/v4/token") .post(requestBody) .build() client.newCall(request).enqueue(object : Callback { override fun onFailure(request: Request, e: IOException) { } @Throws(IOException::class) override fun onResponse(response: Response) { try { val jsonObject = JSONObject(response.body().string()) mTokenExpired = SystemClock.elapsedRealtime() + jsonObject.optLong("expires_in") * 1000 accessTokenObservable.postValue(Resource.success("",jsonObject.optString("access_token"))) } catch (e: JSONException) { e.printStackTrace() } } }) 来获取观察值的总和,紧接其前的两个值。但是,目前,结果显示在每三个一组的顶部/最早的行中,但我希望它显示在最后/最新的行中。

这是示例代码:

zoo::rollsum()

如您所见,我正在使用library(zoo) library(data.table) random_dt <- data.table(group = LETTERS, total = sample(1:10, 26, replace = T)) random_dt <- random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3, align = "right")))] ,这正是我所理解的。当我使用align = "right"align = "left"时,没有任何变化。

我还会收到一条警告,可能与之有关:

  

警告信息:   在as.data.table.list(jval)中:     项目3的尺寸为24,但最大尺寸为26(已回收,剩余2件)

我理解这个信息-通过这样做,前两个观察值没有足够的先前观察值来产生三个的滚动总和。理想情况下,这些值将保留为NA或其他值。但是,这个问题可能是导致价值上升的原因吗?对我来说,align = "center"列中的最后两个值是基于什么并不明显。

1 个答案:

答案 0 :(得分:1)

问题是na.pad默认为FALSE,并且未指定fill参数。因此,它将在一开始就丢弃NA,这会导致长度不平衡。将其更改为na.pad = TRUE并且应该可以使用

random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3, 
     align = "right", na.pad = TRUE)))]

此外,OP还提到了na.pad的过时警告,因此fill = NA会更合适