大列表到数据框,在新列中具有列表标识

Large list to dataframe with list identification in a new column

使用 IETD 包中的示例数据“hourly_time_series”, 我用 IETD 包创建了一个大列表(每个子列表都是不同大小的数据帧)。每个列表代表一个降雨事件。

library(IETD)
HU <- drawre(Time_series=hourly_time_series,IETD=5,Thres=0.5)
RE <- HU$Rainfall_Events

我需要将 RE 转换为带有附加列的数据框,其中包含降雨事件的编号(作为 ID),以便轻松将它们分开。 我尝试使用 bind_rows() 和 rbindlist() 函数,但这些函数不会保留降雨 ID。 我怎么能这样做?例如,所需的输出是:

event Date depth
1 2000-01-06 04:00:00 1.0
1 2000-01-06 05:00:00 0.0
1 2000-01-06 06:00:00 1.5
1 2000-01-06 07:00:00 1.5
2 2000-01-06 20:00:00 0.5
2 2000-01-06 21:00:00 0.5
. . . .
. . . .
. . . .

希望你能帮上忙

我将定义一个示例数据集用于演示,一个名为 ll 的列表包含五个元素,每个元素都是一个包含两个字段的数据框,datedepth。每个列表元素都有一个唯一的名称,例如 event1event2

# Example data
ll <- list()
for(i in 1:5){
  df <- data.frame(
    date = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 100),
    depth = runif(100, 1, 5))
  ll[[paste0("event", i)]] <- df
}

您可以向每个子列表添加一个 ID 字段,然后将列表折叠成一个数据框:

# Define df ID for each list element
ll <- Map(cbind, ll, group = names(ll))

# Collapse list into single dataframe
res <- do.call(rbind, ll)

head(res)
               date    depth
event1.1 1999-04-09 2.174580
event1.2 1999-07-19 2.052316
event1.3 1999-10-23 4.890014
event1.4 1999-04-24 1.208217
event1.5 1999-10-20 1.946533
event1.6 1999-03-10 1.946779