1) База R Предполагая, что df1
и df2
, воспроизводимые в примечании в конце, объединяют кадры данных, давая кадр данных m
.Затем создайте новый фрейм данных df3
, заменив все, кроме первых двух coiumns d2
, на произведение тех же столбцов df2
и соответствующих столбцов m
.Пакеты не используются.
m <- merge(df2, df1, by = 1)
df3 <- replace(df2, -(1:2), df2[-(1:2)] * m[-(1:ncol(df2))] )
, что дает:
> df3
Year Month Farm1 Farm2 Farm3
1 2015 Jan 1000 2000 4500
2 2015 Feb 1000 4000 1500
3 2016 Jan 1000 4000 2000
4 2016 Feb 1000 2000 2000
2) sqldf Если у вас есть только несколько ферм, так что можно написать их каждыйзатем:
library(sqldf)
sqldf("select
Year,
b.Month,
a.Farm1 * b.Farm1 Farm1,
a.Farm2 * b.Farm2 Farm2,
a.Farm3 * b.Farm3 Farm3
from df2 b left join df1 a using (Year)")
давая:
Year Month Farm1 Farm2 Farm3
1 2015 Jan 1000 2000 4500
2 2015 Feb 1000 4000 1500
3 2016 Jan 1000 4000 2000
4 2016 Feb 1000 2000 2000
Примечание
Lines1 <- "
Year Farm1 Farm2 Farm3
2015 1000 2000 1500
2016 500 2000 1000"
Lines2 <- "
Year Month Farm1 Farm2 Farm3
2015 Jan 1 1 3
2015 Feb 1 2 1
2016 Jan 2 2 2
2016 Feb 2 1 2"
df1 <- read.table(text = Lines1, header = TRUE)
df2 <- read.table(text = Lines2, header = TRUE)