2009-10-08 11 views
20

Tengo una tabla agregada:Cómo seleccionar filas de hoja.de.datos con 2 condiciones

> aggdata[1:4,] 
    Group.1 Group.2   x 
1  4 0.05 0.9214660 
2  6 0.05 0.9315789 
3  8 0.05 0.9526316 
4  10 0.05 0.9684211 

¿Cómo puedo seleccionar el valor de x cuando tengo valores para grupo.1 y grupo de trabajo.2?

me trataron:

aggdata[aggdata[,"Group.1"]==l && aggdata[,"Group.2"]==lamda,"x"] 

pero que las respuestas de todas las x.

Más información: Quiero usar esto como esto:

table = data.frame(); 
for(l in unique(aggdata[,"Group.1"])) { 
    for(lambda in unique(aggdata[,"Group.2"])) { 
     table[l,lambda] = aggdata[aggdata[,"Group.1"]==l & aggdata[,"Group.2"]==lambda,"x"] 
    } 
} 

Cualquier sugerencia de que son aún más fácil y da este resultado aprecio!

Respuesta

13

Uso & no & &. Este último solo evalúa el primer elemento de cada vector.

Actualización: para responder a la segunda parte, utilice el paquete de remodelación. Algo como esto lo hará:

tablex <- recast(aggdata, Group.1 ~ variable * Group.2, id.var=1:2) 
# Now add useful column and row names 
colnames(tablex) <- gsub("x_","",colnames(tablex)) 
rownames(tablex) <- tablex[,1] 
# Finally remove the redundant first column 
tablex <- tablex[,-1] 

alguien con más experiencia en el uso reshape puede tener una solución más simple.

Nota: No utilice la tabla como un nombre de variable, ya que entra en conflicto con la función de tabla().

+0

Gracias! Parece, de hecho, seleccionar 1 elemento. Ahora, sin embargo, mi ciclo da el error: "Error en x [[jj]] <- vjj [FALSO]: intento de seleccionar menos de un elemento" ¿Sigue siendo incorrecto? –

+0

Ese error se genera porque usa la tabla [l, lambda] cuando lambda es menor que uno. –

+0

No puedo entender lo que estás tratando de hacer ya que los elementos del grupo no son únicos. –

20

La solución más fácil es cambiar "& &" a "&" en su código.

> aggdata[aggdata[,"Group.1"]==6 & aggdata[,"Group.2"]==0.05,"x"] 
[1] 0.9315789 

Mi solución preferida sería utilizar subconjunto():

> subset(aggdata, Group.1==6 & Group.2==0.05)$x 
[1] 0.9315789 
+1

¿Por qué preferirías un subconjunto? ¿Solo porque es un poco más limpio? – naught101

7

No es un documento muy útil en subconjuntos de tramas de datos R en: http://www.ats.ucla.edu/stat/r/modules/subsetting.htm

Aquí es un extracto relevante:

Subsetting rows using multiple conditional statements: There is no limit to how many logical statements may be combined to achieve the subsetting that is desired. The data frame x.sub1 contains only the observations for which the values of the variable y is greater than 2 and for which the variable V1 is greater than 0.6.

x.sub1 <- subset(x.df, y > 2 & V1 > 0.6)

+0

Este enlace parece ser real: http://www.ats.ucla.edu/stat/r/faq/subset_R.htm. No estoy seguro pero el fragmento citado está allí. – Marek

Cuestiones relacionadas