根据R

时间:2019-09-03 14:37:59

标签: r dataframe foreach

我正在尝试根据数据框的子集计算列的平均值,直到特定日期为止。我创建了一个数据框,其中包含所有要计算该日期的平均值的日期。

例如,我有一个包含以下内容的数据框:

> df
      date  value
2019-01-01      4
2019-01-02      2
2019-01-02      3
2019-01-03      7

和包含日期的数据框:

> a

      date   

2019-01-01   
2019-01-02   
2019-01-03 

我想根据df中的值获取到该日期的平均值。

> a

      date  mean

2019-01-01     4 
2019-01-02     3   
2019-01-03     4

我只是尝试

calculate_mean <- function(input) {
  sub <- subset(df, date < input)
  return(mean(sub$value))
}
a$mean <- calculate_mean(a$date)

不是input是该行的单个日期,而是a中整个日期的列表。因此,每一行的平均值相同。如何只传递该行的单个日期。

目前,我已经通过一个肮脏的for循环解决了该问题,我认为这不是解决方案。

1 个答案:

答案 0 :(得分:0)

一个选项是与data.table进行非等额联接

library(data.table)
setDT(df)[a, .(mean = mean(value)), on = .(date <= date), by = .EACHI]
#          date mean
#1: 2019-01-01    4
#2: 2019-01-02    3
#3: 2019-01-03    4

数据

df <- structure(list(date = structure(c(17897, 17898, 17898, 17899), class = "Date"), 
    value = c(4L, 2L, 3L, 7L)), class = "data.frame", row.names = c(NA, 
-4L))

a <- structure(list(date = structure(c(17897, 17898, 17899), class = "Date")), row.names = c(NA, 
-3L), class = "data.frame")