2011-03-05 19 views
30

que tienen una tabla de datos en R:R: Seleccionar valores de la tabla de datos de gama

name date 
---- ---- 
John 1156649280 
Adam 1255701960 
...etc... 

quiero conseguir todas las filas que tienen una fecha dentro de un rango. En SQL, podría decir SELECT * FROM mytable WHERE date > 5 AND date < 15

¿Cuál es el equivalente en R, para seleccionar filas basadas en el rango de valores de una columna en particular?

+7

Tenga en cuenta que el paquete sqldf le permite aplicar SQL a los marcos de datos R p.ej. 'library (sqldf); sqldf ("select * from mytable where date> 5 and date <15") '. Consulte la página de inicio en http://sqldf.googlecode.com. –

+0

@G. Grothendieck muy bien; Pensé que * alguien * había escrito algo como esto, gracias por el enlace – poundifdef

+4

. Creo que debe tenerse en cuenta que hay un paquete R ** data.table ** que crea objetos de datos de la clase data.table. No está claro si estaba usando el término "tabla de datos" informalmente y en realidad significa ** data.frame **, o si realmente está preguntando sobre objetos ** data.table **. – Ista

Respuesta

43

construir algún datos

df < - hoja.de.datos (name = c ("John", "Adán"), fecha = c (3, 5))

Extracto de juegos compatibles:

subset(df, date==3) 

    name date 
1 John 3 

Extracto coincide en el rango:

subset(df, date>4 & date<6) 

    name date 
2 Adam 5 

La siguiente sintaxis produce resultados idénticos:

df[df$date>4 & df$date<6, ] 

    name date 
2 Adam 5 
+0

Ambos tenían exactamente lo que estaba buscando. ¡Gracias! – poundifdef

14

Muchas opciones aquí, pero una de las más fáciles de seguir es subset. Considere:

> set.seed(43) 
> df <- data.frame(name = sample(letters, 100, TRUE), date = sample(1:500, 100, TRUE)) 
> 
> subset(df, date > 5 & date < 15) 
    name date 
11 k 10 
67 y 12 
86 e 8 

También puede insertar directamente en la lógica del índice para su hoja.de.datos. La coma separa las filas de las columnas. Solo tenemos que recordar que R indexa las filas primero, luego las columnas. Así que aquí estamos diciendo filas con fecha> 5 & < 15 y luego todas las columnas:

df[df$date > 5 & df$date < 15 ,] 

También recomiendo retirar las páginas de ayuda para el subconjunto, ?subset y los operadores lógicos ?"&"

+0

subconjunto() - exactamente lo que estaba buscando. ¡Gracias! – poundifdef

Cuestiones relacionadas