如何从地理人口中抽取系统样本?

时间:2016-04-24 12:31:29

标签: r dataframe sampling

我有一个表示100X100单位平方的数据框(df),在创建了像(z= x+y, where x<-df$x, and y<-df$y)这样的地理人口之后,我需要从中提取一个大小为n=100的系统样本。我该怎么做 ?

1 个答案:

答案 0 :(得分:0)

要从单位平方绘制系统(iid)样本,这里有一种方法:

SyntaxError

将此样本与z变量一起放在data.frame中:

# set random seed for reproducibility
set.seed(123)
# create a 100X2 matrix of unit square observations
myUnitSquareSample <- cbind("x"=runif(100), "y"=runif(100))

如果您已经有一个预先存在的data.frame,df,比如10,000个观察值。您可以按照@ kunal-puri的建议使用df <- data.frame("x"=myUnitSquareSample[,"x"], "y"=myUnitSquareSample[,"y"], "z"=rowSums(myUnitSquareSample)) 函数,如下所示:

sample

最好将选定的行集保留在自己的向量中,以防您需要在脚本中进一步使用它。

要提取均匀间隔的样本,请尝试以下操作:

# set random seed for reproducibility
set.seed(11111)

# choose the set of 100 rows
mySample <- sample(1:nrow(df), size=100)
# extract sampled observations from df
mySampled.df <- df[mySample,]

这会选择边框,为避免这种情况,您可以稍微改变from和to参数。

如果您想从现有数据框架中选择100个或多或少均匀间隔的观察结果,您可以尝试以下方法:

envelySpacedMat <- expand.grid(y=seq(0, 1, length.out=10), 
                                x=seq(0, 1, length.out=10))

    df <- data.frame("x"=envelySpacedMat[,"x"],
                 "y"=envelySpacedMat[,"y"],
                 "z"=rowSums(envelySpacedMat))