假设我有数据帧df1
Home.ID Timeframe_Start Timeframe_End
2 58960 1476748800 1477353600
4 56862 1474329600 1474934400
6 40482 1454284800 1454889600
8 52105 1476748800 1477353600
10 37244 1476748800 1477353600
12 58213 1476748800 1477353600
14 17734 1458000000 1458604800
16 39786 1458000000 1458604800
18 42613 1458000000 1458604800
然后我有第二个数据帧df2,它包含相同的home_id,但它有许多不同的实例(这里只显示了它的一部分)
home_id property_name timestamp_millis value
1 58960 inside_temperature 1.475849e+12 18.510000
2 58960 inside_temperature 1.475850e+12 19.810000
3 58960 inside_temperature 1.475850e+12 19.630000
4 58960 inside_temperature 1.475850e+12 19.470000
5 58960 inside_temperature 1.475850e+12 19.300000
6 58960 inside_temperature 1.475851e+12 19.470000
2482 58960 boiler_output_temperature 1.476755e+12 55.000000
2483 58960 boiler_output_temperature 1.476755e+12 53.000000
2484 58960 boiler_output_temperature 1.476755e+12 51.000000
2485 58960 boiler_output_temperature 1.476755e+12 47.000000
2486 58960 boiler_output_temperature 1.476755e+12 46.000000
2487 58960 boiler_output_temperature 1.476756e+12 55.000000
2488 58960 boiler_output_temperature 1.476756e+12 58.000000
2489 58960 boiler_output_temperature 1.476756e+12 61.000000
现在我想为df1的每一行创建另一个数据帧,其中df2的所有实例具有相同的ID并满足条件属性name ='inside_temperature',并且它们的时间戳在df1列的时间帧start和timeframe end之内 .
结果,我创建了18个不同的数据帧;一个用于df1中的每个实例 - 仅包括在df1中定义的'内部温度'和时间戳值 .
home_id property_name timestamp_millis value
1 58960 inside_temperature 1.475849e+12 18.510000
2 58960 inside_temperature 1.475850e+12 19.810000
3 58960 inside_temperature 1.475850e+12 19.630000
4 58960 inside_temperature 1.475850e+12 19.470000
5 58960 inside_temperature 1.475850e+12 19.300000
6 58960 inside_temperature 1.475851e+12 19.470000
1 回答
由于我没有您的数据帧来重现代码,我只是给出一个通用建议,以避免for循环并将所有数据放在一个地方 .
您可以使用tidyr和purrr包 .
例如:
然后编写一个获取Home.ID和其余数据的函数,应用你想要过滤df2的条件,并给你一个带有所需行的df .
然后向保存列表的df添加一列,每个列表都包含上一步中生成的df
它可能需要一些修改,但通常会像这样工作,并给你一个18行持有所有信息的df .