我在一个列表中有 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 中执行此操作。请参阅附件以了解我的痛苦
因此,对于 b1/136001B 列(G 列),我复制并粘贴了该数据框的前 30 个 rainfall
事件的日期,并检索了该数据框的相应降雨量值,在除了沿列的其他数据框 (I:AB)。在图像的左侧 (B:C:D),包含从数据帧 b1 到 b24 的所有行,这是矩阵索引和匹配的地方。
例如,来自 b1(H 列)(136001B) 的值会考虑 D 列中的所有值,如果日期匹配,则会索引 C 中的相应值。请参阅下图了解等式。沿着 b1:b24 的长度和前 30 天的长度向下拖动它会得到上面的矩阵。
[
如您所见,有一些 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 中重新开始,因为我必须用其他数据帧集多次这样做。
另外,请不要害怕要求澄清,我知道我的杂乱无章需要它。另外,我的标题不是很清楚,如果可以,请提出替代方案?