我的数据框有以下四列:类型(“A”或“B”)、xvar、经度和纬度。看起来像:
type xvar longitude latitude
[1,] A 20 -87.81 40.11
[2,] A 12 -87.82 40.12
[3,] A 50 -87.85 40.22
....
[21,] B 24 -87.79 40.04
[22,] B 30 -87.88 40.10
[23,] B 12 -87.67 40.32
[24,] B 66 -87.66 40.44
....
type="A" 有 20 行,type="B" 有 25,000 行。我的任务是将 20 个“A”数据点的 xvar 值随机分配到“B”类型的 XY 空间而不进行替换。例如,在 type="A" 的第一次观察中的 xvar=20 可以随机位于 [22,] 中,即 (-87.88,40.10) 。因为我在没有替换的情况下这样做,理论上,我可以进行 25,000/20 = 1,250 次复制。我想要 1,000 次复制。
我有一个函数(比如 myfunc(xvar,longitude,latitude)),它从一个随机样本中返回一个统计值。我首先创建一个 1,000x1 的空矩阵(例如 myresult)。
myresult <- array(0,dim=c(1000,1))
然后,对于每个随机样本,我应用我的函数 (myfunc) 来计算统计量。
for (i in seq(1:1000)) {
draw one sample, that has three variables: xvar, longitude, latitude.
apply my function to this selected sample.
store the calculated statistic in the myresult[i,]
}
我想知道如何在 R 中执行此操作。(可能在 Matlab 中??)谢谢!
==================================================== ===========
更新:@用户。借用你的想法,以下是我想要的:
dd1 <- df[df$type == "B" ,]
dd2 <- df[df$type == "A" ,]
v <- dd2[sample(nrow(dd2), nrow(dd2)), ]
randomXvarOfA <- as.matrix(v[,c("xvar")])
cols <- c("longitude","latitude")
B_shuffled_XY <- dd1[,cols][sample(nrow(dd1), nrow(dd2)), ]
dimnames(randomXvarOfA)=list(NULL,c("xvar"))
sampledData <- cbind(randomXvarOfA,B_shuffled_XY)
sampledData
xvar longitude latitude
4 20 -87.79 40.04
7 12 -87.66 40.44
5 50 -87.88 40.10