假设我们有以下数据再采样中的R
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用于提供答案分析以及明确说明的问题。 – 2014-11-03 12:19:56
数据大小是多少?你提到你有一个大数据 – 2014-11-03 12:21:56
不是很大的数据,但比例子中有更多的观察/变量:''data.frame':\t 4454 obs。的15个变量'。 – Giuseppe 2014-11-03 12:28:19