相对于R中的日期的新列

时间:2016-07-10 10:48:10

标签: r

标题很糟糕,但让我试着解释一下我想要的东西(我在Excel中制作的例子)

Div Date       FTHG FTA R   Weight  Home    Away
I1  30.08.2014  0   1   A   0,72    0,00    0,72
I1  30.08.2014  2   0   H   0,72    1,45    0,00
I1  14.09.2014  4   5   A   0,73    2,91    3,64
I1  14.09.2014  2   0   H   0,73    1,45    0,00
I1  15.09.2014  2   1   H   0,73    1,45    0,73
I1  20.09.2014  2   2   D   0,73    1,46    1,46
I1  20.09.2014  0   1   A   0,73    0,00    0,73
I1  21.09.2014  0   1   A   0,73    0,00    0,73
I1  21.09.2014  2   3   A   0,73    1,46    2,20
I1  21.09.2014  1   0   H   0,73    0,73    0,00
I1  21.09.2014  1   1   D   0,73    0,73    0,73
I1  21.09.2014  2   0   H   0,73    1,46    0,00

我需要3个新列:

重量:日期越接近今天,“重量”列越接近1。

主页:重量* FTHG

离开:重量* FTA

我怎样才能在R中这样做? 谢谢!

1 个答案:

答案 0 :(得分:1)

将日期字符串转换为Date对象,并从今天减去以查找时差。根据此时间差和时间常数创建指数。使用它来构建权重,然后乘以适当的列。

cols <- c('Div', 'Date', 'FTHG', 'FTA', 'R')
d <- rbind(
    c('I1','30.08.2014','0','1','A'),
    c('I1','30.08.2014','2','0','H'),
    c('I1','14.09.2014','4','5','A'),
    c('I1','14.09.2014','2','0','H'),
    c('I1','15.09.2014','2','1','H'),
    c('I1','20.09.2014','2','2','D'),
    c('I1','20.09.2014','0','1','A'),
    c('I1','21.09.2014','0','1','A'),
    c('I1','21.09.2014','2','3','A'),
    c('I1','21.09.2014','1','0','H'),
    c('I1','21.09.2014','1','1','D'),
    c('I1','21.09.2014','2','0','H')
)

df <- data.frame(d)
colnames(df) <- cols

# Adjust this
time_constant <- 5.79

df$Weight <- exp( -( (as.numeric(Sys.Date() - as.Date(df$Date,"%d.%m.%Y"))) / 365 )
                  / time_constant )

df$Home <- df$Weight * as.numeric( as.vector( df$FTHG ))
df$Away <- df$Weight * as.numeric( as.vector( df$FTA  ))

print(df)

<强>输出

    Div       Date FTHG FTA R    Weight      Home      Away
 1   I1 30.08.2014    0   1 A 0.7248692 0.0000000 0.7248692
 2   I1 30.08.2014    2   0 H 0.7248692 1.4497384 0.0000000
 3   I1 14.09.2014    4   5 A 0.7300325 2.9201298 3.6501623
 4   I1 14.09.2014    2   0 H 0.7300325 1.4600649 0.0000000
 5   I1 15.09.2014    2   1 H 0.7303780 1.4607559 0.7303780
 6   I1 20.09.2014    2   2 D 0.7321080 1.4642161 1.4642161
 7   I1 20.09.2014    0   1 A 0.7321080 0.0000000 0.7321080
 8   I1 21.09.2014    0   1 A 0.7324545 0.0000000 0.7324545
 9   I1 21.09.2014    2   3 A 0.7324545 1.4649091 2.1973636
 10  I1 21.09.2014    1   0 H 0.7324545 0.7324545 0.0000000
 11  I1 21.09.2014    1   1 D 0.7324545 0.7324545 0.7324545
 12  I1 21.09.2014    2   0 H 0.7324545 1.4649091 0.0000000