按日期范围对多个数据帧进行子集,合并为单个数据帧

时间:2021-04-22 23:14:02

标签: r excel subset

我在一个列表中有 24 个数据帧(名为 b1 - b24),它们遵循一般格式

b1 <- structure(list(Timestamp = c("13/7/1995", "14/7/1995", "15/7/1995", 
                                  "16/7/1995", "17/7/1995", "18/7/1995", "19/7/1995", "20/7/1995", 
                                  "21/7/1995", "22/7/1995", "23/7/1995", "24/7/1995", "25/7/1995", 
                                  "26/7/1995", "27/7/1995", "28/7/1995", "29/7/1995", "30/7/1995", 
                                  "31/7/1995", "1/8/1995"), Rainfall = c(0, 0, 0, 0, 0, 0, 0, 0, 
                                                                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 
                    CodeofStandard = c(83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L)), 
               row.names = c(NA, 20L), class = "data.frame")
b1
#>    Timestamp Rainfall CodeofStandard
#> 1  13/7/1995        0             83
#> 2  14/7/1995        0             83
#> 3  15/7/1995        0             83
#> 4  16/7/1995        0             83
#> 5  17/7/1995        0             83
#> 6  18/7/1995        0             83
#> 7  19/7/1995        0             83
#> 8  20/7/1995        0             83
#> 9  21/7/1995        0             83
#> 10 22/7/1995        0             83
#> 11 23/7/1995        0             83
#> 12 24/7/1995        0             83
#> 13 25/7/1995        0             83
#> 14 26/7/1995        0             83
#> 15 27/7/1995        0             83
#> 16 28/7/1995        0             83
#> 17 29/7/1995        0             83
#> 18 30/7/1995        0             83
#> 19 31/7/1995        0             83
#> 20  1/8/1995        0             83

我已经对前 30 个 Rainfall 事件的每个单独的数据框进行了排序。我想取 timestamp 并将其他 24 个子集作为该 Rainfall 的相应 Timestamp 值。其他 24 个数据帧中可能缺少日期,因此如果存在缺失值,我希望提取 NA 代替 Rainfall 值。

我目前一直在 Excel 中执行此操作。请参阅附件以了解我的痛苦

enter image description here

因此,对于 b1/136001B 列(G 列),我复制并粘贴了该数据框的前 30 个 rainfall 事件的日期,并检索了该数据框的相应降雨量值,在除了沿列的其他数据框 (I:AB)。在图像的左侧 (B:C:D),包含从数据帧 b1 到 b24 的所有行,这是矩阵索引和匹配的地方。 例如,来自 b1(H 列)(136001B) 的值会考虑 D 列中的所有值,如果日期匹配,则会索引 C 中的相应值。请参阅下图了解等式。沿着 b1:b24 的长度和前 30 天的长度向下拖动它会得到上面的矩阵。

[enter image description here

如您所见,有一些 NA 值,这意味着包含该特定日期的行不存在。

然后我想将该矩阵转换为具有三列的数据框

其中 Station 是从中检索降雨值的站点 (b1:b24)。 Rainfall 是所述降雨值,Origin 是此实例中原始数据框的前 30 个降雨事件,b1

请参阅下面我想要的输出

all_b1 <- structure(list(Station = c("b1", "b1", "b1", "b1", "b1", "b1", 
                                 "b1", "b1", "b1", "b1", "b1", "b2", "b2", "b2", "b2", "b2", "b2", 
                                 "b2", "b2", "b2", "b2"), Rainfall = c(66L, 64L, 64L, 62L, 62L, 
                                                                       61L, 61L, 60L, 59L, 59L, 59L, 211L, 176L, 68L, 134L, 135L, 220L, 
                                                                       100L, 57L, 27L, 98L), Origin = c(66L, 64L, 64L, 62L, 62L, 61L, 
                                                                                                        61L, 60L, 59L, 59L, 59L, 210L, 162L, 146L, 143L, 141L, 125L, 
                                                                                                        102L, 101L, 95L, 92L)), row.names = 20:40, class = "data.frame")
all_b1
#>    Station Rainfall Origin
#> 20      b1       66     66
#> 21      b1       64     64
#> 22      b1       64     64
#> 23      b1       62     62
#> 24      b1       62     62
#> 25      b1       61     61
#> 26      b1       61     61
#> 27      b1       60     60
#> 28      b1       59     59
#> 29      b1       59     59
#> 30      b1       59     59
#> 31      b2      211    210
#> 32      b2      176    162
#> 33      b2       68    146
#> 34      b2      134    143
#> 35      b2      135    141
#> 36      b2      220    125
#> 37      b2      100    102
#> 38      b2       57    101
#> 39      b2       27     95
#> 40      b2       98     92

请告诉我从哪里开始。我很想在 R 中重新开始,因为我必须用其他数据帧集多次这样做。

另外,请不要害怕要求澄清,我知道我的杂乱无章需要它。另外,我的标题不是很清楚,如果可以,请提出替代方案?

0 个答案:

没有答案