簡體   English   中英

R:根據日期循環數據幀提取數據子集

[英]R: loop through data frame extracting subset of data depending on date

我有一個大型數據框,包含如下所示的數據:

        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

遍歷每個唯一日期並構建子集。

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

這是你想要的嗎 ? df_list <- split(data, as.factor(data$date))

在按日期對數據集進行子設置之后,假設您要應用於每個子集的函數是查找列x的平均值。 你可以這樣做:( df是你的數據幀)

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

您可以將data.frame拆分為data.frames list ,如下所示:

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

這是plyr包的完美情況:

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

其中my_function是您要對拆分數據幀執行的函數,而extra_arg是需要轉到該函數的任何額外參數。

如果你想在數據框中得到結果, ddplyd ata frame - > d ata frame)就是你想要的形式; dlply返回一個列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM