这是我的虚拟数据:
income <- as.data.frame.vector <- sample(1000:10000, 1000, replace=TRUE)
individuals <- as.data.frame.vector <- sample(1:50,1000,replace=TRUE)
datatest <- as.data.frame (cbind (income, individuals))
我知道我可以使用以下代码按单个行进行采样:
sample <- datatest[sample(nrow(datatest), replace=TRUE),]
现在,我想提取具有数据集的替换和相等概率的随机样本,但是使用相同的单个代码对完整的观察块进行采样。 请注意,有50个人,但有1000个观察。一些观察结果属于同一个体,因此我想通过个体(在这种情况下为聚类)进行抽样,而不是观察。我不介意提取的样本在观察数量上是否略有不同。我怎样才能做到这一点?
我试过了:
library(sampling)
samplecluster <- cluster (datatest, clustername=c("individuals"), size=50,
method="srswr")
但结果不是采样数据。我错过了什么吗?
答案 0 :(得分:2)
我不确定我是否遗漏了什么。如果您只是想要一些个人,可以创建一个较小的样本:
ind.sample <- sample(1:50, size = 10)
print(ind.sample)
# [1] 17 43 38 39 28 23 35 47 9 13
my.sample <- datatest[datatest$individuals %in% ind.sample) ,]
head(my.sample)
# income individuals
#21 9072 17
#97 5928 35
#122 9130 43
#252 4388 43
#285 8083 28
#287 1065 35
我想更通用的方法是生成随机索引;
ind.unique <- unique(individuals)
ind.sample.index <- sample(1:length(ind.unique), size = 10)
ind.sample <- ind.unique[ind.sample.index]
print(ind.sample[order(ind.sample)])
my.sample <- datatest[datatest$individuals %in% ind.sample, ]
ind.counts <- aggregate(income ~ individuals, my.sample, FUN = length)
print(ind.counts)
答案 1 :(得分:2)
好吧,似乎我确实遗漏了一些东西。在cluster
命令之后,您需要应用getdata
命令(全部来自采样包)。这样我就可以得到我想要的样本,还有一些额外的列。
samplecluster <- cluster (datatest, clustername=c("personid"), size=50, method="srswr")
给你:
head(samplecluster)
individuals ID_unit Replicates Prob
1 1 259 2 0.63583
2 1 178 2 0.63583
3 1 110 2 0.63583
4 1 153 2 0.63583
5 1 941 2 0.63583
6 1 667 2 0.63583
然后使用getdata
,我还得到整个集群抽样收入的原始数据:
datasample <- getdata (datatest, samplecluster)
head(datasample)
income individuals ID_unit Replicates Prob
1 8567 1 259 2 0.63583
2 2701 1 178 2 0.63583
3 4998 1 110 2 0.63583
4 3556 1 153 2 0.63583
5 2893 1 941 2 0.63583
6 7581 1 667 2 0.63583
答案 2 :(得分:1)
我认为重要的是要注意数据集仍然需要扩展以包含所有重复项。
sw<-data.frame(datasample[rep(seq_len(dim(datasample)[1]), datasample$Replicates),, drop = FALSE], row.names=NULL)
可能会对某人有所帮助