【发布时间】:2014-12-30 01:05:29
【问题描述】:
假设我们有以下数据
set.seed(123)
dat <- data.frame(var1=c(10,35,13,19,15,20,19), id=c(1,1,2,2,2,3,4))
(sampledIDs <- sample(min(dat$id):max(dat$id), size=3, replace=TRUE))
> [1] 2 4 2
sampledIDs 是从dat$id 采样(带替换)的 id 向量。
我需要生成的代码(并且也适用于具有更多变量的大型数据集):
var1 id
13 2
19 2
15 2
19 4
13 2
19 2
15 2
代码dat[which(dat$id%in%sampledIDs),] 没有给我我想要的,因为这段代码的结果是
var1 id
13 2
19 2
15 2
19 4
dat$id==2 的主题在此数据中仅出现一次(我明白为什么会出现这样的结果,但不知道如何得到我想要的)。有人可以帮忙吗?
编辑:感谢您的回答,这里是所有答案的运行时间(对于那些感兴趣的人):
test replications elapsed relative user.self
3 dat[unlist(lapply(sampledIDs, function(x) which(x == dat$id))), ] 1000 0.67 1.000 0.64
1 dat[which(sapply(sampledIDs, "==", dat$id), arr.ind = TRUE)[, 1], ] 1000 0.67 1.000 0.67
2 do.call(rbind, split(dat, dat$id)[as.character(sampledIDs)]) 1000 1.83 2.731 1.83
4 setkey(setDT(dat), id)[J(sampledIDs)] 1000 1.33 1.985 1.33
【问题讨论】:
-
+1 用于提供答案分析以及明确说明的问题。
-
数据大小是多少?你提到你有一个大数据
-
不是真正的大数据,但比示例中的观察/变量更多:
'data.frame': 4454 obs. of 15 variables。 -
您说您的数据很大...让我发布一个相对较大数据集的基准。 4K 数据集不大,很小
标签: r matrix sampling resampling