2014-07-11 12 views

risposta

1

In primo luogo, qui è il set di dati per i miei scopi: foo=data.frame(Users=1:6,Age=c(2,7,10,3,8,20))

Ecco il vostro primo set di dati con età 0-5: subset(foo,Age<=5&Age>=0)

Users Age 
1  1 2 
4  4 3 

Ecco la tua seconda con età 6-10: subset(foo,Age<=10&Age>=6)

Users Age 
2  2 7 
3  3 10 
5  5 8 

Il tuo terzo (utilizzando subset(foo,Age<=15&Age>=11)) è vuoto - l'ultima osservazione Age ha superato 1 5.

Nota anche che le età frazionarie tra 5 e 6 o 10 e 11 (ad esempio, 5.1, 10.5) sarebbero escluse, poiché questo codice corrisponde alla tua domanda letteralmente. Se desideri che qualcuno con meno di 6 anni entri nel primo gruppo, modifica il codice in subset(foo,Age<6&Age>=0). Se preferisci una persona ipotetica con Age=5.1 nel secondo gruppo, il codice di quel gruppo sarà subset(foo,Age<=10&Age>5).

6

È possibile combinare split con cut di fare questo in una sola riga di codice, evitando la necessità di sottoinsieme con un mazzo di diverse espressioni per i dati diverse categorie:

split(dat, cut(dat$Age, c(0, 5, 10, 15), include.lowest=TRUE)) 
# $`[0,5]` 
# Users Age 
# 1  1 2 
# 4  4 3 
# 
# $`(5,10]` 
# Users Age 
# 2  2 7 
# 3  3 10 
# 5  5 8 
# 
# $`(10,15]` 
# [1] Users Age 
# <0 rows> (or 0-length row.names) 

cut divide i dati in base alla punti di interruzione specificati e split suddivide un riquadro dati in base alle categorie fornite. Se è stato memorizzato il risultato di questo calcolo in un elenco denominato l, è possibile accedere ai frame di dati più piccoli con l[[1]], l[[2]] e l[[3]] o il più verbose:

l$`[0,5]` 
l$`(5,10]` 
l$`(10, 15]` 
Problemi correlati