首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库存不足10个月的价值的平均值

库存不足10个月的价值的平均值
EN

Stack Overflow用户
提问于 2018-11-19 11:46:02
回答 1查看 54关注 0票数 1

因此,我有一个datatable (dt),它包含以下元素,一个项目的id,当天的日期和库存。

代码语言:javascript
复制
ID        date             Stock
193sd      2016-03-23        12
238ds      2016-04-20         1
193sd      2017-09-12         1
...

例如,像193 So 这样的ID有不同的日期

代码语言:javascript
复制
ID        date             Stock
193sd    2016-03-23          12
193sd    2017-09-12          1
193sd    2018-09-11          4
193sd    2017-01-12          2
193sd    2016-02-11          1

我需要从10个月前的最新日期中找到股票的平均值,我知道我应该做以下操作:

为193司d

  1. 将dt$date从最新到最老排序
  2. 获取从日期(I)到日期(i+1)之间的月数。 dates=c(dateNew, dateOld) dates2 <- strptime(dates, format = "%Y-%m-%d") dif <- diff(as.numeric(dates2)) # difference in seconds months = dif/(60 * 60 * 24 * 30) # months
  3. 检查是否M<=10
  4. 如果为真,则查找ID和finish的这些日期的股票均值。 这个平均值是dt$stock除以10的值之和。
  5. 假冒伪劣

作为其他语言的程序员和R的新手,我总是考虑循环,但我确信在使用可数据的时候有一个更好的清洁器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 12:03:23

使用包data.tablelubridate,您可以执行以下操作

代码语言:javascript
复制
library(data.table); library(lubridate);

df <- read.table(text = 
"ID      date                Stock
193sd    2016-03-23          12
193sd    2017-09-12          1
193sd    2018-09-11          4
193sd    2018-01-12          NA
193sd    2017-12-11          1", header = T, stringsAsFactors = F)

dt <- as.data.table(df) 
dt[, date := as.Date(date)]
result <- dt[, .SD[date >= max(date) %m-% months(10)], by = ID][, .(customMean = sum(Stock, na.rm = T)/10), by = ID] #calculate the mean stock as you described for entries in date that are within 10 months from the last date for each ID
##      ID customMean
##1: 193sd        0.5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53373964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档