Data structures 列。也许应该注意的是,范围在这里很有用,因为我们有几个分离的范围,您可以使用展平组合。否则可能会使用Span(;)。@Leonid,您的解决方案似乎可以处理字符串列标题。一般来说,您是否建议在数据结构中保持标题由字符串组成?我也必须承认,我正在努力使用你的

Data structures 列。也许应该注意的是,范围在这里很有用,因为我们有几个分离的范围,您可以使用展平组合。否则可能会使用Span(;)。@Leonid,您的解决方案似乎可以处理字符串列标题。一般来说,您是否建议在数据结构中保持标题由字符串组成?我也必须承认,我正在努力使用你的,data-structures,wolfram-mathematica,Data Structures,Wolfram Mathematica,列。也许应该注意的是,范围在这里很有用,因为我们有几个分离的范围,您可以使用展平组合。否则可能会使用Span(;)。@Leonid,您的解决方案似乎可以处理字符串列标题。一般来说,您是否建议在数据结构中保持标题由字符串组成?我也必须承认,我正在努力使用你的代码,但我仍在努力,试图找出我做错了什么。如果我失败了,我会尽力用最好的方式来解决问题,寻求你的帮助。再次感谢@500在表数据操作的特殊情况下,我建议保留标题,因为它们更具描述性,而且列索引出错的可能性更小——我的解决方案应该是自动转换为索引号


列。也许应该注意的是,范围在这里很有用,因为我们有几个分离的范围,您可以使用展平组合。否则可能会使用Span(;)。@Leonid,您的解决方案似乎可以处理字符串列标题。一般来说,您是否建议在数据结构中保持标题由字符串组成?我也必须承认,我正在努力使用你的代码,但我仍在努力,试图找出我做错了什么。如果我失败了,我会尽力用最好的方式来解决问题,寻求你的帮助。再次感谢@500在表数据操作的特殊情况下,我建议保留标题,因为它们更具描述性,而且列索引出错的可能性更小——我的解决方案应该是自动转换为索引号。至于我的代码,让我知道哪些部分可能会导致混乱,我会发布更好的解释。有一件事可能很有启发性,那就是查看为
Select
生成的纯函数-例如,您可以使用调试实用程序
ShowIt
来执行此操作,我在最近的调试问题中介绍了该工具。@500保留标题的另一个很好的原因是,它们提供了一定程度的间接性,并使您的解决方案更加健壮:如果您希望稍后更改表中列的顺序(例如,通过在表中插入新的列类型,或删除现有的列类型,或简单地交换列),则使用标题名进行的查询将保持有效,而所有具有显式索引的函数都可能成为垃圾。出于同样的原因,真正的SQL查询使用列名而不是数字索引进行操作。@Leonid,你介意看看这个笔记本吗?在这里,当我尝试使用你的代码时,你会看到发生了什么。我想我真的错过了一些愚蠢的事情,如果是这样的话,请原谅我。再次感谢您的帮助:@500适合我。对于
select[{“RowNO”,“trialNo”},从[table],其中[“condCOG”==2]]
我得到了表的列表
{{1,1},{4,2},{8,4},{14,7},{16,8}
。我认为这是正确的。如果您还有其他问题,也可以通过gmail.com的lshifr写信给我,在那里您可以将文件作为附件发送。那么,到底是什么对你不起作用?你得到同样的结果列表了吗?
data = Array[#1 #2 &, {5, 15}];
data[[All, Flatten@{Range@3, Range @@ {6, 9}, -1}]]

MatrixForm@%
data = RandomInteger[{1, 20}, {40, 20}]

x = 5;
y = 8;
Select[data, (#[[2]] == x && #[[8]] != y &)][[All, {1, 2, 3, 6, 7, 8, 9, -1}]]

==> {{5, 5, 1, 4, 18, 6, 3, 5}, {10, 5, 15, 3, 15, 14, 2, 5}, {18, 5, 6, 7, 7, 19, 14, 6}}
Clear[getIds];
getIds[table : {colNames_List, rows__List}] := {rows}[[All, 1]];

ClearAll[select, where];
SetAttributes[where, HoldAll];
select[cnames_List, from[table : {colNames_List, rows__List}], where[condition_]] :=
With[{colRules =  Dispatch[ Thread[colNames -> Thread[Slot[Range[Length[colNames]]]]]],
    indexRules  =  Dispatch[Thread[colNames -> Range[Length[colNames]]]]},
     With[{selF = Apply[Function, Hold[condition] /. colRules]},
       Select[{rows}, selF @@ # &][[All, cnames /. indexRules]]]];
rows = Array[#1 #2 &, {5, 15}];
In[425]:= 
colnames = "c" <> ToString[#] & /@ Range[15]

Out[425]= {"c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", 
"c13", "c14", "c15"}
table = Prepend[rows, colnames];
select[{"c1", "c2", "c3", "c6", "c7", "c8", "c9", "c15"}, from[table],
    where["c2" == 4 && "c8" != 2]]

{{2, 4, 6, 12, 14, 16, 18, 30}}
In[468]:= select[{"c1", "c2", "c3"}, from[table], where[EvenQ["c2"] && "c10" > 10]]

Out[468]= {{2, 4, 6}, {3, 6, 9}, {4, 8, 12}, {5, 10, 15}}
a = RandomInteger[5, {20, 10}];          (*define the array*)
x = 4; y = 0;                            (*define the test values*)

Join @@ Range @@@ {1 ;; 3, 6 ;; 9};      (*define the column ranges*)

#2 == x && #8 != y & @@@ a;              (*test the rows*)

Append[%%, #] & /@ % /. {True -> -1, False :> Sequence[]};  (*complete the ranges according to the test*)

MapThread[Part, {a, %}] // TableForm     (*extract and display*)