大列表到数据框,在新列中具有列表标识
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
的列表包含五个元素,每个元素都是一个包含两个字段的数据框,date
和 depth
。每个列表元素都有一个唯一的名称,例如 event1
、event2
等
# 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
使用 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
的列表包含五个元素,每个元素都是一个包含两个字段的数据框,date
和 depth
。每个列表元素都有一个唯一的名称,例如 event1
、event2
等
# 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