按簇替换重新采样
Resample with replacement by cluster
我想绘制聚类(由变量 id
定义)并从数据集中进行替换,与之前回答的问题相反,我希望选择 K 次的聚类让每个观察重复 K 次.也就是说,我正在做集群引导。
例如,以下样本 id=1
两次,但在新数据集 s
中仅重复一次 id=1
的观察结果。我希望 id=1
的所有观察结果出现两次。
f <- data.frame(id=c(1, 1, 2, 2, 2, 3, 3), X=rnorm(7))
set.seed(451)
new.ids <- sample(unique(f$id), replace=TRUE)
s <- f[f$id %in% new.ids, ]
一个选择是 lapply
遍历每个 new.id
并将其保存在列表中。然后你可以把它们堆叠在一起:
library(data.table)
rbindlist(lapply(new.ids, function(x) f[f$id %in% x,]))
# id X
#1: 1 1.20118333
#2: 1 -0.01280538
#3: 1 1.20118333
#4: 1 -0.01280538
#5: 3 -0.07302158
#6: 3 -1.26409125
以防万一需要 "new_id" 对应于索引号(即样品订单)——(我需要 "new_id" 这样我就可以 运行 混合效果模型,因为它们共享相同的 id 而没有将一个集群的多个实例视为一个集群):
library(data.table)
f = data.frame( id=c(1,1,2,2,2,3,3), X = rnorm(7) )
set.seed(451); new.ids = sample( unique(f$id), replace=TRUE )
## ss has unique valued `new_id` for each cluster
ss = rbindlist(mapply(function(x, index) cbind(f[f$id %in% x,], new_id=index),
new.ids,
seq_along(new.ids),
SIMPLIFY=FALSE
))
ss
给出:
> ss
id X new_id
1: 1 -0.3491670 1
2: 1 1.3676636 1
3: 1 -0.3491670 2
4: 1 1.3676636 2
5: 3 0.9051575 3
6: 3 -0.5082386 3
注意 X 的值是不同的,因为 set.seed 在 rnorm()
调用之前没有设置,但 id 与@Mike H 的答案相同。
这个 link 对我构建这个答案很有用:R lapply 带有索引的语句 [重复]
我想绘制聚类(由变量 id
定义)并从数据集中进行替换,与之前回答的问题相反,我希望选择 K 次的聚类让每个观察重复 K 次.也就是说,我正在做集群引导。
例如,以下样本 id=1
两次,但在新数据集 s
中仅重复一次 id=1
的观察结果。我希望 id=1
的所有观察结果出现两次。
f <- data.frame(id=c(1, 1, 2, 2, 2, 3, 3), X=rnorm(7))
set.seed(451)
new.ids <- sample(unique(f$id), replace=TRUE)
s <- f[f$id %in% new.ids, ]
一个选择是 lapply
遍历每个 new.id
并将其保存在列表中。然后你可以把它们堆叠在一起:
library(data.table)
rbindlist(lapply(new.ids, function(x) f[f$id %in% x,]))
# id X
#1: 1 1.20118333
#2: 1 -0.01280538
#3: 1 1.20118333
#4: 1 -0.01280538
#5: 3 -0.07302158
#6: 3 -1.26409125
以防万一需要 "new_id" 对应于索引号(即样品订单)——(我需要 "new_id" 这样我就可以 运行 混合效果模型,因为它们共享相同的 id 而没有将一个集群的多个实例视为一个集群):
library(data.table)
f = data.frame( id=c(1,1,2,2,2,3,3), X = rnorm(7) )
set.seed(451); new.ids = sample( unique(f$id), replace=TRUE )
## ss has unique valued `new_id` for each cluster
ss = rbindlist(mapply(function(x, index) cbind(f[f$id %in% x,], new_id=index),
new.ids,
seq_along(new.ids),
SIMPLIFY=FALSE
))
ss
给出:
> ss
id X new_id
1: 1 -0.3491670 1
2: 1 1.3676636 1
3: 1 -0.3491670 2
4: 1 1.3676636 2
5: 3 0.9051575 3
6: 3 -0.5082386 3
注意 X 的值是不同的,因为 set.seed 在 rnorm()
调用之前没有设置,但 id 与@Mike H 的答案相同。
这个 link 对我构建这个答案很有用:R lapply 带有索引的语句 [重复]