我有两个看起来像这样的数据框:
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
offlinedf:
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)
答案 0 :(得分:3)
我们可以使用substring
提取年份信息,然后使用case_when
基于年份信息来计算权重。 onlinedf2
是最终输出。
library(dplyr)
onlinedf2 <- onlinedf %>%
mutate(Year = substring(month, 1, 4)) %>%
mutate(weightedJevons = case_when(
Year == "2014" ~ Jevons * 0.232,
Year == "2015" ~ Jevons * 0.256,
TRUE ~ NA_real_
)) %>%
select(-Year)
onlinedf2
# month index Jevons weightedJevons
# 1 201408 1.0000000 1.0000000 0.2320000
# 2 201409 0.9881163 0.9881163 0.2292430
# 3 201410 0.9685963 0.9353384 0.2169985
# 4 201411 0.9772775 0.8951670 0.2076787
# 5 201412 0.9570516 0.7550252 0.1751658
# 6 201501 0.9614457 0.7520039 0.1925130
# 7 201502 0.9888529 0.7204573 0.1844371
# 8 201503 0.8893120 0.7124263 0.1823811
答案 1 :(得分:0)
为什么不呢:
bytea