【问题标题】:R: loop through data frame extracting subset of data depending on dateR:循环遍历数据框,根据日期提取数据子集
【发布时间】:2023-03-23 23:46:01
【问题描述】:

我有一个大型数据框,其中包含如下所示的数据:

        date    w    x    y    z    region
1    2012 01    21   43   12    3   NORTH
2    2012 02    32   54   21   16   NORTH
3    2012 03    14   32   65   32   NORTH
4    2012 04    65   33   75   21   NORTH
:        :      :    :    :    :       :
:        :      :    :    :    :       :
12   2012 12    32   58   53   17   NORTH
13   2012 01    12   47   43   23   SOUTH
14   2012 02    87   43   21   76   SOUTH
:        :      :    :    :    :       :
25   2012 01    12   46   84   29    EAST
26   2012 02    85   29   90   12    EAST
:        :      :    :    :    :       :
:        :      :    :    :    :       :

我想提取具有相同date 值的数据部分,例如仅针对2012 01 执行此操作,我只需创建一个数据子集

data_1 <- subset(data, date == "2012 01")

这为我提供了2012 01 的所有数据,但我继续对这些数据应用一个函数。我希望能够将我的函数应用于我的数据的所有可能子集,因此理想情况下,我将遍历我的大型数据框并提取2012 01, 2012 02, 2012 03, 2012 04... 的数据,并将函数分别应用于这些数据子集的每一个。

但即使我的数据帧长度发生变化,我也希望能够将其应用于我的数据帧,因此它可能并不总是从 2012 01 - 2012 12 开始,日期范围可能会有所不同,因此有时可能是用于来自例如 2011 03 - 2013 01 的数据。

【问题讨论】:

    标签: r for-loop dataframe subset


    【解决方案1】:

    遍历每个唯一日期并构建子集。

    uniq <- unique(unlist(data$Date))
    for (i in 1:length(uniq)){
        data_1 <- subset(data, date == uniq[i])
        #your desired function
    }
    

    【讨论】:

    • 每个子集都有唯一的名称吗?据我所知,您最终会将每个子集放在一个数据框中。谢谢
    • 没有每个循环只会覆盖data_1,然后用户可以将任何函数应用于数据帧并选择自己存储结果的位置。
    • @TylerDurden 。它看起来是我需要的。如果我想根据地区和日期制作子集怎么办?例如data_1
    • @PolarBear 这是一个新问题。只需谷歌它,答案很简单google.com/#safe=active&q=subset+data+r+2+conditions
    【解决方案2】:

    这是你想要的吗? df_list &lt;- split(data, as.factor(data$date))

    【讨论】:

    • 这太完美了!这么简单的答案,我认为会更复杂,谢谢
    【解决方案3】:

    在按日期对数据集进行子集设置后,假设您要应用于每个子集的函数是求列x 的平均值。你可以这样做:(df是你的数据框)

     library(plyr)
     ddply(df, .(date), summarize, mean = mean(x))
    

    【讨论】:

      【解决方案4】:

      您可以像这样将data.frame 拆分为listdata.frames

      list.of.dfs<-by(data,data$date)
      

      【讨论】:

      • 似乎不起作用。 by() 缺少 FUN 参数
      【解决方案5】:

      这是plyr 包的完美情况:

      require(plyr)
      ddply(my_df, .(date), my_function, extra_arg_1, extra_arg_2)
      

      其中my_function 是您要在拆分数据帧上执行的函数,extra_args 是需要转到该函数的任何额外参数。

      ddply (data frame -> data frame) 是您想要的数据框中的结果; dlply 返回一个列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-03
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多