【问题标题】:Create a stack of n subset data frames from a single data frame based on date column根据日期列从单个数据帧创建一个包含 n 个子集数据帧的堆栈
【发布时间】:2015-08-31 07:17:25
【问题描述】:

我需要根据日期列(例如 - 月-年格式的“2015 年 8 月”)从一个大的 df 创建一堆子数据框。它应该类似于子集函数,除了要形成的子集 dfs 的计数应该根据日期列上的可用值动态变化

所有子集数据框都需要具有相似的结构,以便每个子集df 的日期列值都相同。

假设,如果我的大 df 当前有过去 10 个月的数据,我现在需要 10 个子数据帧,如果我下个月运行相同的命令(有 11 个月的基础数据),我需要 11 个 dfs。

我尝试过类似下面的方法。但是在每次迭代之后,子集subdf_i 都会被覆盖。因此,我只得到一个子集 df atlast,其中包含月份列的最后一个值。

我认为这将被创建为 45 个子集 dfs,例如 subdf_1subdf_2、... 和 subdf_45,对应于月份列的所有 45 个唯一值。

uniqmnth <- unique(df$mnth)

for (i in 1:length(uniqmnth)){

    subdf_i <- subset(df, mnth == uniqmnth[i])

    i==i+1

}

我希望子集函数中应该有一些选项,或者任何循环都可以。我是 R 的初学者,不知道如何做到这一点。

【问题讨论】:

  • 你已经尝试过什么? split() 是否满足您的需求?否则,请查看 dplyr 包。
  • @Bala 请read 知道如何询问可重现的示例。
  • 您使用 RStudio 的事实与此无关。如果您寻求帮助,您应该首先努力并阅读上面已经指出的关于如何提问的网站政策。
  • @agstudy 感谢有关可重现示例的建议。我会牢记,继续前进。
  • 如果您使用for 循环,您可能需要assign 在全局环境中创建新的对象名称。

标签: r


【解决方案1】:

我认为完美的解决方案可能是对迭代变量 i 使用 assign(),以附加到 45 个子集的名称中。感谢朋友的来信。这是避免每次循环运行都覆盖子集数据帧的解决方案。

uniqmnth <- unique(df$mnth)

for (i in 1:length(uniqmnth)){
  assign(paste("subdf_",i,sep=""), subset(df, mnth == uniqmnth[i])) i==i+1 
}

【讨论】:

  • 你不需要i=i+1
  • 我建议避免使用assign,以便在您的全局环境中创建对象阅读here
  • 作为@DavidArenburg 最好不要在全局环境中创建大量对象。
猜你喜欢
  • 2019-12-22
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2023-03-24
  • 2020-09-18
相关资源
最近更新 更多