我正在R中处理一个包含3个因素的大型数据集: FY (6个级别)、Region (10个级别)和Service (24个级别)。我需要在所有三个级别对我的数字向量SumOfUnits求和,我能想到的唯一方法是首先将数据帧拆分为6个数据帧,按FY拆分,然后将这6个数据帧拆分为10个数据帧,按区域拆分,然后将这10个数据帧拆分为24个服务,最后我可以取该数值向量的和并将所有数据帧重组为一个。该数据帧将具有6*10*24 (1440)行和4列。我现在做的方式涉及到很多拆分,所以我想可能会有一个我可以编写的函数,我可以在拆分的每个级别使用,但我没有在R中经常使用" function“,所以我不确定要写什么(如果有什么东西的话)。我还认为可能有一种更有效的方法来获取格式化的数据集,所以我欢迎所有的建议。
以下是我的数据框中的几行代码:
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...我希望我的数据样本看起来像这样:
FY Region Service SumOfUnits
2006 1 Medication 4300
2006 2 Medication 3299
2006 3 Medication 2198
2007 1 Medication 5467
2007 2 Medication 3214
2007 3 Medication 9807发布于 2013-06-06 04:34:19
这是一个很好的函数来做这件事:
library(plyr)
ddply(MIC, .(FY, Region, Service), summarize, sumOfUnits=sum(SumOfUnits))它提供的正是您所需要的。
对于MIC =
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 7https://stackoverflow.com/questions/16948855
复制相似问题