2

我正在尝试对面板数据集进行子集化,以仅读取每个“区域”的前 855 个观察值。区域列有 65 个不同的区域,每个区域有 1070 个观测值。由此,我想减少数据集以包含所有 65 个区域,但只有它们的前 855 个观察值(相应地减少所有其他变量)。

     Region       Week       VolSales  UnitSales BaseVol  BaseUnits 
1065 Los Angeles 02/01/2011    2004.80  2166.18   1921.53  1934.84         
1066 Los Angeles 02/01/2011    1949.03  1479.03   1700.07  1700.07           
1067 Los Angeles 02/01/2011    5231.11  5904.96   4846.51  4811.38           
1068 Los Angeles 02/01/2011    6267.45  6524.85   4675.77  4328.05           
1069 Los Angeles 02/01/2011    2317.29  2180.61   1795.83  1019.11           
1070 Los Angeles 02/01/2011    3433.70  3493.10   1729.77  2179.09       

我能得到的最接近的方法是使用新变量为每个区域定义数据,然后对其进行子集化,如下所示:

R1 <- subset(data, data$Region == "Los Angeles")
R2 <- subset(data, data$Region == "Chicago")

等等....然后服用

Sample1 <- R1[1:855]
Sample2 <- R2[1:855]

然后将其组合形成整个数据集并根据 Regions 进行排列(如原始数据集中的排列)

FinalDataset <- cbind(Sample1,Sample2)

但是,当然,这不是一种有效的方法,我期待得到一些帮助来更有效地完成它。我希望我正确地解释了这个问题。

4

2 回答 2

4

使用基础 R 的解决方案:

List = by(data, data$Region, function(x) x[1:855,])

FinalDataset = do.call('rbind', List)

如果你想使用 data.table 包:

data = data.table(data)
FinalDataset = data[,.SD[1:855],by=Region]
于 2014-07-21T17:13:59.467 回答
1

使用dplyr

library(dplyr)
 data %>% 
 group_by(Region) %>% 
 do(head(., n=855))

例子

 set.seed(24)
 data <- data.frame(Region=rep(c("Los Angeles", "Chicago"),each=10), Value=rnorm(20),stringsAsFactors=F)

 data%>% group_by(Region) %>% do(head(., n=2))
 #Source: local data frame [4 x 2]
  #Groups: Region
  #
  #       Region      Value
 #1      Chicago -1.3169081
 #2      Chicago  0.5982691
 #3  Los Angeles -0.5458808
 #4  Los Angeles  0.5365853
于 2014-07-21T17:41:04.720 回答