我有一个带有id和value列的数据框“v”,例如:
set.seed(123)
v <- data.frame(id=sample(1:5),value=sample(1:5))
v
id value
1 2 1
2 4 3
3 5 4
4 3 2
5 1 5
在循环中,我想找到v的索引,其中v的id与tmp匹配,然后根据该索引查找v的子集。 tmp是一个“替换”v $ id
的示例这是我的尝试:
df <- vector(mode='list',length = iter)
iter = 1
for (i in 1:iter)
{
tmp <- sample(v$id, replace=T)
index.position <- NULL
for (j in 1:length(tmp)) {index.position <- c(index.position, which(v$id %in% tmp[j]) )}
df[[i]] <- v[index.position,]
}
tmp
[1] 1 5 3 5 2
df
[[1]]
id value
5 1 5
3 5 4
4 3 2
3.1 5 4
1 2 1
这可以按预期工作。但是,当“v”和“iter”都很大时,执行速度很慢,因为增长index.position数组不是内存效率。
我还尝试创建一个空矩阵或列表作为占位符,然后在循环时为其指定index.position,但并没有真正加快进程。 (参考:Growing a data.frame in a memory-efficient manner)
编辑:id“在v
中不是唯一的”答案 0 :(得分:0)
尽量避免... for ...循环。这是非常低效的。它等于:
for (i in 1:iter)
{
df[[i]] <- v[sample(nrow(v),replace = T),]
}
格雷戈尔解决方案的详细版本......