【发布时间】:2019-11-18 03:07:23
【问题描述】:
我要解决的问题是将具有相似名称的列逐行相乘。 考虑以下示例 df:
library(tidyverse)
library(lubridate)
sample_df <- data.frame(stringsAsFactors=FALSE,
Date = c("1/03/2018 0:00", "1/03/2018 4:00", "1/03/2018 8:00"),
EUR_USD_Open = c(0.892093896, 0.891937999, 0.891744285),
EUR_USD_High = c(0.89245654, 0.892283601, 0.892616906),
EUR_USD_Low = c(0.891803229, 0.89117644, 0.891483374),
EUR_USD_Close = c(0.891942211, 0.891748495, 0.892405914),
USD_JPY_Open = c(1.887128916, 1.887340614, 1.887501691),
USD_JPY_High = c(1.887470444, 1.887677094, 1.887746746),
USD_JPY_Low = c(1.886890576, 1.887246812, 1.887167418),
USD_JPY_Close = c(1.887338209, 1.887504095, 1.887210726),
USD_CHF_Open = c(0.997952231, 0.997969721, 0.997971242),
USD_CHF_High = c(0.99799974, 0.997989483, 0.998035047),
USD_CHF_Low = c(0.997949949, 0.997933211, 0.997968961),
USD_CHF_Close = c(0.997970102, 0.997970862, 0.99799936),
USD_SEK_Open = c(1.092929855, 1.092928195, 1.092853491),
USD_SEK_High = c(1.092993997, 1.092943686, 1.093004716),
USD_SEK_Low = c(1.09291292, 1.092803475, 1.092767679),
USD_SEK_Close = c(1.09292825, 1.09285338, 1.092896312),
USD_CAD_Open = c(1.022980632, 1.022990785, 1.022967577),
USD_CAD_High = c(1.023079216, 1.023053854, 1.02313861),
USD_CAD_Low = c(1.022959598, 1.022919695, 1.022958873),
USD_CAD_Close = c(1.02299151, 1.022966852, 1.023073419),
GBP_USD_Open = c(0.962767254, 0.962746434, 0.962811407),
GBP_USD_High = c(0.96287142, 0.962841409, 0.962998227),
GBP_USD_Low = c(0.962725618, 0.962629918, 0.962640732),
GBP_USD_Close = c(0.962747267, 0.962806408, 0.96284391)
) %>%
mutate(Date = dmy_hm(Date))
对于每个日期,我想将所有列与Open、Close 等相乘。
最终输出应如下所示:
output_df <- data.frame(stringsAsFactors=FALSE,
Date = c("1/03/2018 0:00", "1/03/2018 4:00", "1/03/2018 8:00"),
Open = c(1.808434992, 1.808329582, 1.808051308),
High = c(1.810060115, 1.80970432, 1.811075804),
Low = c(1.807469953, 1.806079386, 1.806720451),
Close = c(1.808339444, 1.808050604, 1.809484003)
)%>%
mutate(Date = dmy_hm(Date))
任何想法如何有效地完成这项工作?
对 DT 或 Tidyverse 解决方案感到满意。
【问题讨论】:
标签: r dplyr data.table