我有两个表:
Table1
包含一年的时间序列:
Date year month hour value
01/01/2020 2020 1 0 1800
01/01/2020 2020 1 1 1300
01/01/2020 2020 1 2 400
01/01/2020 2020 1 3 1235
01/01/2020 2020 1 4 120.014
01/01/2020 2020 1 5 812.54
以此类推。
我还有一个Table2
,其中在表格中针对某个Factor
(国家/地区)给出了固定分布Name
Name Factor
UK 0.003
BE 0.018
DE 0.28
FR 0.43
现在,我想创建另一个数据框/表Table3
,该数据框/表将由两个表Table1
和Table2
的嵌套循环填充,使得
Value
中每个Hour
的{{1}}将与Table1
中Factor
(国家)的Name
相乘,并循环运行全年即Table2
中的行数。因此,将根据Table1
中的Value
分发Table1
中的第一个1800
,即Factor
。例如对于Table2
,它将是UK
因此,结果1800*0.003=5.4
应该是这样的(仅给出两个小时):
Table3
Table3
因此,在整个一年中,Name Date Year Month Hour New_value
UK 01/01/2020 2020 1 0 5.4
BE 01/01/2020 2020 1 0 32.4
DE 01/01/2020 2020 1 0 504
FR 01/01/2020 2020 1 0 774
UK 01/01/2020 2020 1 1 3.9
BE 01/01/2020 2020 1 1 23.4
DE 01/01/2020 2020 1 1 364
FR 01/01/2020 2020 1 1 559
Value
将分布在所有1800
然后Names
中,依此类推。这就是我在嵌套for循环中所做的:
1300
我没有得到想要的输出。我不确定我的循环出错了吗?谁能帮我改善代码吗?任何帮助将不胜感激。谢谢。
答案 0 :(得分:3)
如果我正确理解您的示例,则无需循环。由于没有公共列,因此对于每种merge
,都可以使用Table2
来回收Table1
。那只是算术。
Table3 <- merge(Table1, Table2)
Table3$new_value <- with(Table3, value * Factor)
head(Table3[order(Table3$hour),], 10)
Date year month hour value Name Factor new_value
1 01/01/2020 2020 1 0 1800 UK 0.003 5.4
7 01/01/2020 2020 1 0 1800 BE 0.018 32.4
13 01/01/2020 2020 1 0 1800 DE 0.280 504.0
19 01/01/2020 2020 1 0 1800 FR 0.430 774.0
2 01/01/2020 2020 1 1 1300 UK 0.003 3.9
8 01/01/2020 2020 1 1 1300 BE 0.018 23.4
14 01/01/2020 2020 1 1 1300 DE 0.280 364.0
20 01/01/2020 2020 1 1 1300 FR 0.430 559.0
3 01/01/2020 2020 1 2 400 UK 0.003 1.2
9 01/01/2020 2020 1 2 400 BE 0.018 7.2
数据:
Table1 <- read.table(text="Date year month hour value
01/01/2020 2020 1 0 1800
01/01/2020 2020 1 1 1300
01/01/2020 2020 1 2 400
01/01/2020 2020 1 3 1235
01/01/2020 2020 1 4 120.014
01/01/2020 2020 1 5 812.54", header = TRUE)
Table2 <- read.table(text="Name Factor
UK 0.003
BE 0.018
DE 0.28
FR 0.43", header = TRUE)