循环遍历数据框,根据日期提取数据子集。

6

我有一个大的数据框,其中包含以下类似数据:

        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
:        :      :    :    :    :       :
:        :      :    :    :    :       :

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

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

这使我得到了所有2012 01的数据,但我随后会对这些数据应用一个函数。我希望能够将我的函数应用于所有可能的子集数据,所以理想情况下,我将循环遍历我的大数据框并提取2012 01、2012 02、2012 03、2012 04... 的数据,并分别对这些数据子集应用一个函数。

但是,我希望即使我的数据框的长度发生变化,也能将此应用于我的数据框,因此日期范围可能会有所不同,有时可能会在例如2011 03-2013 01的数据上使用。

5个回答

15

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

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

每个子集会有一个唯一的名称吗?从我看到的情况来看,您将最终将每个子集放入一个数据框中。谢谢。 - BlackHat
没有任何循环会仅仅覆盖data_1,用户可以对数据框应用任何函数,并选择自己想要存储结果的位置。 - TylerDurden
@TylerDurden。看起来正是我需要的。如果我想根据地区和日期同时创建子集,该怎么办?例如:data_1 <- subset(data, date == "2012 01" & "North")。 - Polar Bear
@PolarBear 这是一个新问题。只需在谷歌上搜索,答案就很明显 https://www.google.com/#safe=active&q=subset+data+r+2+conditions - TylerDurden

10

这是你要的内容吗?

df_list <- 将数据按照日期分割为数据框列表(data, as.factor(data$date))

太好了!这个答案如此简单,我原以为会更加复杂。谢谢你。 - userk

2

在按日期对数据集进行子集划分之后,假设您想要应用于每个子集的函数是查找列 x 的平均值。可以按照以下方式操作:(df 是您的数据框)

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

0

这是使用plyr包的完美情况:

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

其中my_function是您要在拆分的数据框上执行的函数,而extra_arg是需要传递给该函数的任何额外参数。

ddplydata frame -> data frame)是您想要结果为数据框的形式;dlply返回一个列表。


0
你可以这样将你的data.frame拆分成一个list包含多个data.frames
list.of.dfs<-by(data,data$date)

似乎无法工作。by()缺少FUN参数。 - Jerry T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接