我有一个大型数据框,其中包含如下所示的数据:
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
的数据。
答案 0 :(得分:15)
遍历每个唯一日期并构建子集。
uniq <- unique(unlist(data$Date))
for (i in 1:length(uniq)){
data_1 <- subset(data, date == uniq[i])
#your desired function
}
答案 1 :(得分:10)
df_list <- split(data, as.factor(data$date))
答案 2 :(得分:2)
按日期对数据集进行子设置后,假设您要应用于每个子集的函数是查找列x
的平均值。你可以这样做:( df是你的数据帧)
library(plyr)
ddply(df, .(date), summarize, mean = mean(x))
答案 3 :(得分:0)
您可以将data.frame
分成list
个data.frames
,如下所示:
list.of.dfs<-by(data,data$date)
答案 4 :(得分:0)
这是plyr
包的完美情况:
require(plyr)
ddply(my_df, .(date), my_function, extra_arg_1, extra_arg_2)
其中my_function
是您要对拆分数据帧执行的函数,extra_arg
是需要转到该函数的任何额外参数。
ddply
(d
ata frame - &gt; d
ata frame)就是您想要的表单。 dlply
返回一个列表。