Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to select rows from data.frame with 2 conditions

Tags:

I have an aggregated table:

> 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 

How can I select the x value when I have values for Group.1 and Group.2?

I tried:

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

but that replies all x's.

More info: I want to use this like this:

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"]     } } 

Any suggestions that are even easier and giving this result I appreciate!

like image 657
Peter Smit Avatar asked Oct 08 '09 09:10

Peter Smit


People also ask

How do you select rows from a DataFrame based on multiple conditions?

To select the rows based on mutiple condition we can use the & operator.In this example we have passed mutiple conditon using this code dfobj. loc[(dobj['Name'] == 'Rack') & (dobj['Marks'] == 100)]. This code will return a subset of dataframe rows where name='Rack' and marks =100.


1 Answers

The easiest solution is to change "&&" to "&" in your code.

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

My preferred solution would be to use subset():

> subset(aggdata, Group.1==6 & Group.2==0.05)$x [1] 0.9315789 
like image 92
Ken Williams Avatar answered Oct 26 '22 21:10

Ken Williams