标题很糟糕,但让我试着解释一下我想要的东西(我在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中这样做? 谢谢!
答案 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