【发布时间】:2018-07-09 08:16:51
【问题描述】:
我有两个如下所示的数据框:
onlinedf :
month index Jevons
201408 1.0000000 1.0000000
201409 0.9881163 0.9881163
201410 0.9685963 0.9353384
201411 0.9772775 0.8951670
201412 0.9570516 0.7550252
201501 0.9614457 0.7520039
201502 0.9888529 0.7204573
201503 0.8893120 0.7124263
离线f:
month index Jevons
201408 1.0000000 1.0000000
201409 0.9881163 0.9881163
201410 0.9685963 0.9353384
201411 0.9772775 0.8951670
201412 0.9570516 0.7550252
201501 0.9614457 0.7520039
201502 0.9888529 0.7204573
201503 0.8893120 0.7124263
为方便起见,我用相同的数字填充了两个数据帧,但实际上数据帧中的数字是不同的,每个数据帧都有不同的时间段,我有数据。
我有在线和离线 Jevons 的权重,例如2014 年在线 Jevons 的权重为 23.2(因此离线权重为 76.8),2015 年在线 Jevons 的权重为 25.6(因此离线权重为 74.5)。
我想要做的是能够将所有在线 2014 Jevons 数据乘以 23.2,并将所有在线 2015 Jevons 数据乘以 25.6。然后在离线数据框中,所有 2014 年的数据为 76.8,所有 2015 年的数据为 74.5。
理想情况下,对于在线数据,我的输出应该是这样的......
month index Jevons weightedJevons
201408 1.0000000 1.0000000 0.2320000
201409 0.9881163 0.9881163 0.2292430
201410 0.9685963 0.9353384 0.2169985
201411 0.9772775 0.8951670 0.2076787
201412 0.9570516 0.7550252 0.1751658
201501 0.9614457 0.7520039 0.1925130
201502 0.9888529 0.7204573 0.1844371
201503 0.8893120 0.7124263 0.1823811
我最初使用了一个 mutate 函数,但这只允许我应用一年的权重,而不是在 2015 年更改它。所以我尝试创建自己的函数,但惨遭失败......
我从这样的事情开始......
onlineweightFun <- function(x, y){
if(x starts_with(2014)){
y * 0.232
}
if(x starts_with(2015)){
y * 0.256
}
}
& 尝试了这种变化,直到我决定在这里问你们。任何帮助将不胜感激!您可以使用以下方法轻松模拟我的数据框:
month <- c("201408", "201409", "201410", "201411", "201412", "201501", "201502", "201503")
index <- c(1.0000000, 0.9881163, 0.9685963, 0.9772775, 0.9570516, 0.9614457, 0.9888529, 0.8893120)
Jevons <- c(1.0000000, 0.9881163, 0.9353384, 0.8951670, 0.7550252, 0.7520039, 0.7204573, 0.7124263)
onlinedf <- data.frame(month, index, Jevons)
【问题讨论】:
标签: r function date dplyr data-manipulation