Supponiamo di avere i seguenti datiricampionamento da id soggetti di R in
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
Il sampledIDs è un vettore di id che viene campionato (con sostituzione) da dat$id
. Ho bisogno del codice che si traduce in (e funziona anche per un grande insieme di dati con più variabili):
var1 id
13 2
19 2
15 2
19 4
13 2
19 2
15 2
Il codice dat[which(dat$id%in%sampledIDs),]
non mi dà quello che voglio, dal momento che il risultato di questo codice è
var1 id
13 2
19 2
15 2
19 4
dove il soggetto con dat$id==2
appare una sola volta in questi dati (ho capito perché questo è il risultato, ma non so come ottenere ciò che voglio). Qualcuno può aiutarmi per favore?
EDIT: Grazie per le risposte, qui il tempo di esecuzione di tutte le risposte (per coloro che sono interessati):
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 per fornire l'analisi delle risposte, nonché un problema chiaramente dichiarato. –
Qual era la dimensione dei dati? Stavi citando che hai un grosso numero di dati –
Non proprio grandi dati, ma più osservazioni/variabili che nell'esempio: ''data.frame': \t 4454 obs. di 15 variabili'. – Giuseppe