首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据R中另一个Dataframe的日期创建多个数据

根据R中另一个Dataframe的日期创建多个数据
EN

Stack Overflow用户
提问于 2022-08-29 19:36:43
回答 1查看 30关注 0票数 0

我想要自动基于另一个的日期间隔来创建多个数据文件。假设我有一个例子:

代码语言:javascript
复制
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-012022-01-04的数据,df2应该包含从2022-01-022022-01-05的数据,df3应该包含从2022-01-032022-01-06的数据。这样,这就是所需的输出,所有对象都作为dataframes:

代码语言:javascript
复制
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比这个例子要大得多,而且它每天都在增加,所以我需要使这个过程自动化。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-29 20:56:42

以下是另一种选择:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73533852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档