R:如果日期重合,则将一列中的值乘以另一列中的值
R: Multiply values in one column to those in another if the dates coincide
我已经尝试了好几天了,但我似乎找不到办法。
我有两个数据框。
一个名为 "df1",有两个变量:日期、价格
date price
2019-12-21 140
2019-10-25 91
2019-10-24 91
2019-12-13 70
另一个,名为"df2",有两个变量:日期、汇率
date exchange rate
2019-12-21 1.1097
2019-12-22 1.117
2019-12-23 1.1075
... ...
2019-12-13 1.108
... ...
2019-10-25 1.1074
2019-10-24 1.1073
我想在日期重合时将 df2 中的汇率乘以 df1 中的价格。并将其添加到 df1 的列中。所以结果会是这样的:
date price priceEUR
1 2019-12-21 140 155.358
2 2019-10-25 91 100.7734
3 2019-10-24 91 100.7643
4 2019-12-13 70 77.56
非常感谢。
一种方法是:
library(tidyverse)
df3 <- inner_join(df1, df2)
df3 <- df3 %>%
mutate(priceEUR = price * rate)
我们也可以使用base R来做到这一点。
使用match
:
df1$priceEUR <- df1$price * df2$exchange_rate[match(df1$date, df2$date)]
df1
# date price priceEUR
#1 2019-12-21 140 155.3580
#2 2019-10-25 91 100.7734
#3 2019-10-24 91 100.7643
#4 2019-12-13 70 77.5600
或使用 merge
和 transform
transform(merge(df1, df2, by = "date"), priceEUR = price * exchange_rate)
数据
df1 <- structure(list(date = structure(c(4L, 2L, 1L, 3L), .Label = c("2019-10-24",
"2019-10-25", "2019-12-13", "2019-12-21"), class = "factor"),
price = c(140L, 91L, 91L, 70L)), row.names = c(NA, -4L), class = "data.frame")
df2 <- structure(list(date = structure(c(4L, 5L, 6L, 3L, 2L, 1L),
.Label = c("2019-10-24", "2019-10-25", "2019-12-13", "2019-12-21", "2019-12-22",
"2019-12-23"), class = "factor"), exchange_rate = c(1.1097, 1.117, 1.1075, 1.108,
1.1074, 1.1073)), class = "data.frame", row.names = c(NA, -6L))
我已经尝试了好几天了,但我似乎找不到办法。 我有两个数据框。 一个名为 "df1",有两个变量:日期、价格
date price
2019-12-21 140
2019-10-25 91
2019-10-24 91
2019-12-13 70
另一个,名为"df2",有两个变量:日期、汇率
date exchange rate
2019-12-21 1.1097
2019-12-22 1.117
2019-12-23 1.1075
... ...
2019-12-13 1.108
... ...
2019-10-25 1.1074
2019-10-24 1.1073
我想在日期重合时将 df2 中的汇率乘以 df1 中的价格。并将其添加到 df1 的列中。所以结果会是这样的:
date price priceEUR
1 2019-12-21 140 155.358
2 2019-10-25 91 100.7734
3 2019-10-24 91 100.7643
4 2019-12-13 70 77.56
非常感谢。
一种方法是:
library(tidyverse)
df3 <- inner_join(df1, df2)
df3 <- df3 %>%
mutate(priceEUR = price * rate)
我们也可以使用base R来做到这一点。
使用match
:
df1$priceEUR <- df1$price * df2$exchange_rate[match(df1$date, df2$date)]
df1
# date price priceEUR
#1 2019-12-21 140 155.3580
#2 2019-10-25 91 100.7734
#3 2019-10-24 91 100.7643
#4 2019-12-13 70 77.5600
或使用 merge
和 transform
transform(merge(df1, df2, by = "date"), priceEUR = price * exchange_rate)
数据
df1 <- structure(list(date = structure(c(4L, 2L, 1L, 3L), .Label = c("2019-10-24",
"2019-10-25", "2019-12-13", "2019-12-21"), class = "factor"),
price = c(140L, 91L, 91L, 70L)), row.names = c(NA, -4L), class = "data.frame")
df2 <- structure(list(date = structure(c(4L, 5L, 6L, 3L, 2L, 1L),
.Label = c("2019-10-24", "2019-10-25", "2019-12-13", "2019-12-21", "2019-12-22",
"2019-12-23"), class = "factor"), exchange_rate = c(1.1097, 1.117, 1.1075, 1.108,
1.1074, 1.1073)), class = "data.frame", row.names = c(NA, -6L))