因此,我有一个datatable (dt),它包含以下元素,一个项目的id,当天的日期和库存。
ID date Stock
193sd 2016-03-23 12
238ds 2016-04-20 1
193sd 2017-09-12 1
...例如,像193 So 这样的ID有不同的日期
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
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作为其他语言的程序员和R的新手,我总是考虑循环,但我确信在使用可数据的时候有一个更好的清洁器。
发布于 2018-11-19 12:03:23
使用包data.table和lubridate,您可以执行以下操作
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.5https://stackoverflow.com/questions/53373964
复制相似问题