Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建一个函数来多次拆分数据帧,然后重新组合_R_Function_Split_Rbind - Fatal编程技术网

R 创建一个函数来多次拆分数据帧,然后重新组合

R 创建一个函数来多次拆分数据帧,然后重新组合,r,function,split,rbind,R,Function,Split,Rbind,我正在研究R中的一个大型数据集,其中包含3个因素:FY(6个级别)、地区(10个级别)和服务(24个级别)。我需要在所有三个级别对我的数值向量SumOfUnits求和,我能想到的唯一方法是首先将数据帧拆分为6个数据帧,按FY拆分,然后将这6个数据帧拆分为10个数据帧,按区域拆分,然后将这10个数据帧拆分为24个服务,然后,我最终可以得到数值向量的和,并将所有数据帧重新组合成一个。该数据帧将有6*10*24(1440)行和4列。我目前的做法涉及到很多拆分,所以我认为可能有一个我可以编写的函数,我可

我正在研究R中的一个大型数据集,其中包含3个因素:FY(6个级别)、地区(10个级别)和服务(24个级别)。我需要在所有三个级别对我的数值向量SumOfUnits求和,我能想到的唯一方法是首先将数据帧拆分为6个数据帧,按FY拆分,然后将这6个数据帧拆分为10个数据帧,按区域拆分,然后将这10个数据帧拆分为24个服务,然后,我最终可以得到数值向量的和,并将所有数据帧重新组合成一个。该数据帧将有6*10*24(1440)行和4列。我目前的做法涉及到很多拆分,所以我认为可能有一个我可以编写的函数,我可以在拆分的每个级别使用,但我在R中没有太多使用“函数”,所以我不确定要编写什么(如果有)。我还认为可能有一种更有效的方法来获取格式化数据集,因此我欢迎所有建议

以下是我的数据框中的几行:

    FY    Region    Service               SumOfUnits
1   2006    1     Medication                 13
2   2006    1     Medication                 1
3   2006    1     Screening & Assessment    38
4   2006    1     Screening & Assessment    13
5   2006    1     Screening & Assessment    41
6   2006    1     Screening & Assessment    67
7   2006    1     Screening & Assessment    222
8   2006    1     Residential Treatment      38
9   2006    1     Residential Treatment     1558
这是我用于拆分的代码:

# Creating a data frame by year
X <- split(MIC, MIC$FY)

Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, ]) 
#Assign the dataframes in the list Y to individual objects
A <- Y[[1]]
B <- Y[[2]]
C <- Y[[3]]
D <- Y[[4]]
E <- Y[[5]]
Q <- Y[[6]]

#Creating 10 dataframes from 2006 split by region
X <- split(A, A$Region)

Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, ])

Reg1 <- Y[[1]]
Reg2 <- Y[[2]]
Reg3<- Y[[3]]
Reg4 <- Y[[4]]
Reg5<- Y[[5]]
Reg6 <- Y[[6]]
Reg7 <- Y[[7]]
Reg8 <- Y[[8]]
Reg9 <- Y[[9]]
Reg10<- Y[[10]]

#Creating 24 dataframes: for 2006, region 1
X <- split(Reg1, Reg1$Service)

Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, ])

Serv1 <- Y[[1]]
Serv2 <- Y[[2]]
Serv3<- Y[[3]]
Serv4 <- Y[[4]]
Serv5<- Y[[5]]
#etc...

这是一个非常好的函数:

library(plyr)
ddply(MIC, .(FY, Region, Service), summarize, sumOfUnits=sum(SumOfUnits))
它会给你所需要的东西

对于麦克风=

FY        Region Service SumOfUnits
1 2006      1       A          1
2 2006      2       B          4
3 2007      1       C          3
4 2007      2       D          2
5 2007      2       E          7
6 2006      1       A          3
7 2007      1       D          3
8 2007      2       B          4
9 2007      2       B          6
返回:

FY      Region Service sumOfUnits
1 2006      1       A   4
2 2006      2       B   4
3 2007      1       C   3
4 2007      1       D   3
5 2007      2       B  10
6 2007      2       D   2
7 2007      2       E   7

你看过plyr吗?…或者仅仅是
aggregate
even,对吧?我两个都试过了,但都不知道如何在3个因素的层次上使用它们。例如,我可以这样做:
library(plyr)Sum\u Year for aggregate,您可以这样做
aggregate(SumOfUnits~FY+Region+Service,data=MIC,FUN=Sum)
FY      Region Service sumOfUnits
1 2006      1       A   4
2 2006      2       B   4
3 2007      1       C   3
4 2007      1       D   3
5 2007      2       B  10
6 2007      2       D   2
7 2007      2       E   7