5

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

        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.

4

5 回答 5

15

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

uniq <- unique(unlist(data$Date))
for (i in 1:length(uniq)){
    data_1 <- subset(data, date == uniq[i])
    #your desired function
}
于 2013-08-22T14:15:37.973 回答
10

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

于 2013-08-22T14:10:05.140 回答
2

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

 library(plyr)
 ddply(df, .(date), summarize, mean = mean(x))
于 2013-08-22T14:18:09.343 回答
0

你可以把你的data.frame分成这样list的:data.frames

list.of.dfs<-by(data,data$date)
于 2013-08-22T14:10:33.283 回答
0

这是plyr包的完美情况:

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

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

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

于 2013-08-22T14:13:45.773 回答