我正在尝试将面板数据集子集化,以便只读取每个“Region”的前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]
然后将其组合以形成整个数据集并根据区域排列(按照原始数据集中的排列)
FinalDataset <- cbind(Sample1,Sample2
)
但是,当然,这不是一种有效的方式,我期待得到一些更有效的帮助。我希望我能正确解释这个问题。
答案 0 :(得分: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]
答案 1 :(得分: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