我想要自动基于另一个的日期间隔来创建多个数据文件。假设我有一个例子:
df <- data.frame(Date = as.Date(c("2022-01-01", "2022-01-01",
"2022-01-02", "2022-01-02", "2022-01-02",
"2022-01-03",
"2022-01-04", "2022-01-04",
"2022-01-05", "2022-01-05", "2022-01-05")),
Name = c(LETTERS[1:11]),
Value = c(1:11))我的目标是创建3个新的Dataframes。df1应该包含从2022-01-01到2022-01-04的数据,df2应该包含从2022-01-02到2022-01-05的数据,df3应该包含从2022-01-03到2022-01-06的数据。这样,这就是所需的输出,所有对象都作为dataframes:
df1 <- data.frame(Date = as.Date(c("2022-01-01", "2022-01-01",
"2022-01-02", "2022-01-02", "2022-01-02",
"2022-01-03")),
Name = c(LETTERS[1:6]),
Value = c(1:6))
df2 <- data.frame(Date = as.Date(c("2022-01-02", "2022-01-02", "2022-01-02",
"2022-01-03",
"2022-01-04", "2022-01-04")),
Name = c(LETTERS[3:8]),
Value = c(3:8))
df3 <- data.frame(Date = as.Date(c("2022-01-03",
"2022-01-04", "2022-01-04",
"2022-01-05", "2022-01-05", "2022-01-05")),
Name = c(LETTERS[6:11]),
Value = c(6:11))请注意,每个日期的观测数是不同的。我实际的Dataframe比这个例子要大得多,而且它每天都在增加,所以我需要使这个过程自动化。有什么建议吗?
发布于 2022-08-29 20:56:42
以下是另一种选择:
dates <- seq(df$Date[1], df$Date[1]+3, by = "day")
dates
# [1] "2022-01-01" "2022-01-02" "2022-01-03" "2022-01-04"
Map(function(a, b) dplyr::filter(df, between(Date, a, b)), dates, dates + 3)
# [[1]]
# Date Name Value
# 1 2022-01-01 A 1
# 2 2022-01-01 B 2
# 3 2022-01-02 C 3
# 4 2022-01-02 D 4
# 5 2022-01-02 E 5
# 6 2022-01-03 F 6
# 7 2022-01-04 G 7
# 8 2022-01-04 H 8
# [[2]]
# Date Name Value
# 1 2022-01-02 C 3
# 2 2022-01-02 D 4
# 3 2022-01-02 E 5
# 4 2022-01-03 F 6
# 5 2022-01-04 G 7
# 6 2022-01-04 H 8
# 7 2022-01-05 I 9
# 8 2022-01-05 J 10
# 9 2022-01-05 K 11
# [[3]]
# Date Name Value
# 1 2022-01-03 F 6
# 2 2022-01-04 G 7
# 3 2022-01-04 H 8
# 4 2022-01-05 I 9
# 5 2022-01-05 J 10
# 6 2022-01-05 K 11
# [[4]]
# Date Name Value
# 1 2022-01-04 G 7
# 2 2022-01-04 H 8
# 3 2022-01-05 I 9
# 4 2022-01-05 J 10
# 5 2022-01-05 K 11当然,这使四而不是三,但这可以很容易地控制分配给dates。
这产生了一个框架的list,而不是三个独立的框架。我想您会发现,当您有多个结构相同的(列名/意图)帧时,最好将它们保存在列表中,这样当您打算对每个帧做一些事情时,您可以很容易地使用lapply。有关这方面的更多讨论,请参见https://stackoverflow.com/a/24376207/3358227。
https://stackoverflow.com/questions/73533852
复制相似问题