From: Garapata on 22 May 2010 00:42 I have a list with the following dimensionality: Dimensions[list] Dimensions[list[[1]]] Dimensions[list[[2]]] Dimensions[list[[3]]] {3} {130, 3} {126, 3} {191, 3} I think of it as 3 groups, each with a different number of rows, but each of these rows has 3 columns. Of the 3 columns, the third has dates in a DateList format. So, I can simulate the list with the following: a = Table[{RandomInteger[10], RandomInteger[10], DatePlus[{2010, 1, 1}, RandomInteger[{1, 150}]]}, {1}, {191}]; list = Join[a[[All, 4 ;; 133, All]], a[[All, 1 ;; 126, All]], a]; Ultimately I'd like to find all the rows that intersect on the same dates and put the whole thing into a 2 dimensional structure that would have the following columns: commonDates, group1Data1, group1Data2, group2Data1, group2Data2, group3Data1, group3Data2, I can use Intersect[] to find the common dates: Intersection[list[[1, All,3]], list[[2, All, 3]], list[[3, All, 3]]]; but this seems a bit cumbersome given I may have a greater or lesser number of groups. Seems like I need to start this in a better way, but since Intersection[] doesn't take a list of lists I don't know where to take this. Probably easier if I had a more regular structure but I don't. Any help in pointing me in the right direction much appreciated. Thx to all.
From: Bill Rowe on 23 May 2010 03:17 On 5/22/10 at 12:42 AM, warsaw95826(a)mypacks.net (Garapata) wrote: >I have a list with the following dimensionality: > Dimensions[list] > Dimensions[list[[1]]] > Dimensions[list[[2]]] > Dimensions[list[[3]]] You can get exactly the same result using Map (shorthand /@) here. That is Dimensions[list[ Dimensions/@list yields the same result as you posted >I think of it as 3 groups, each with a different number of rows, but >each of these rows has 3 columns. Of the 3 columns, the third has >dates in a DateList format. >So, I can simulate the list with the following: >a = Table[{RandomInteger[10], RandomInteger[10], DatePlus[{2010, 1, >1}, RandomInteger[{1, 150}]]}, {1}, {191}]; list = Join[a[[All, 4 ;; >133, All]], a[[All, 1 ;; 126, All]], a]; >Ultimately I'd like to find all the rows that intersect on the same >dates and put the whole thing into a 2 dimensional structure that >would have the following columns: >commonDates, group1Data1, group1Data2, group2Data1, group2Data2, >group3Data1, group3Data2, >I can use Intersect[] to find the common dates: >Intersection[list[[1, All,3]], list[[2, All, 3]], list[[3, All, >3]]]; >but this seems a bit cumbersome given I may have a greater or lesser >number of groups. Seems like I need to start this in a better way, >but since Intersection[] doesn't take a list of lists I don't know >where to take this. much less cumbersome is using Map and Apply, that is commonDates=Intersection@@(#[[All,3]]&/@list); Once you have the common dates, you can select the desired data using Cases as follows Cases[SortBy[#,Last],{__,_?(MemberQ[commonDates,#]&)]]&/@list
|
Pages: 1 Prev: Numerical solution of differential equation Next: SQLExecute with an argument |