使用索引匹配表的行

1个视图(过去30天)
卢卡斯Netzer
卢卡斯Netzer 2021年8月9日
编辑: 卢卡斯Netzer2021年8月10日
我有一个索引:
Index = [1;3;7;10;15;
我想使用索引访问表1中的行:
表1。WP1 =[1;8;17;24;26;28;35;45;53;57;68;75;79;81;85;96;103;108;118;125];
表1。WP2 =[8;17;24;26;28;35;45;53;57;68;;75;79;81;85;96;103;108;118;125;130];
我总是需要访问一系列行,定义为:
K = 1:高度(索引)-1
Range = index(k)+1:index(k+1)-1
这应该会导致每次迭代需要检查的行:
Range = [2:2;4:6;8:9;11:14;16:16;18:19]
所以在迭代1中,我想要访问行2:2,这应该给我的值:
(8、17)
迭代2访问第4:6行,因此检查值:
[[24、26],[26日28],[28:35]]
我希望这是可以理解的。感谢任何帮助或提示,关于什么技术可能是最好的!
谢谢你!

答案(1)

彼得·珀金斯
彼得·珀金斯 2021年8月9日
Lukas,您没有说在获得这些行之后实际需要做什么,但我建议您应该使用带有分组变量的rowfun。下面是分组变量:
>> g = 0 (20,1);G (index) = 1;
> > cumsum (g)
ans =
1
1
2
2
2
2
3.
3.
3.
4
4
4
4
4
5
5
6
6
6
7
把它添加到您的表中,您就万事俱备了。没有循环。
1评论
卢卡斯Netzer
卢卡斯Netzer 2021年8月10日
编辑:卢卡斯Netzer 2021年8月10日
嘿,彼得,
谢谢你的回答。我会给你更多的背景,这应该能更好地描述我的问题:
我有两张桌子。表1包含:
表1。WP1 ={0;0;145;169;1693;1708;2729;0;0;48;1382;1390;1896;1899;2549;2569;0;0;145;169;1693;1708;2638;0};
表1。WP2 ={0;145;169;1693;1708;2729;2779;0;48;1382;1390;1896;1899;2549;2569;2750;0;145;169;1693;1708;2638;2737;0};
表1。WC = {0, 0, 1, 1, 1, 1, 0, 0, 0; 1; 1; 1; 1; 1; 1; 0, 0, 0; 1; 1; 1; 1; 0, 0};
而table2包含以下内容:
表二。WP1 ={0, 0; 5; 115; 219; 262; 328; 408; 424; 531; 562; 620; 676; 781; 805; 808; 919; 1009; 1112; 1183; 1241; 1254; 1283; 1323; 1346; 1362; 1383; 1472; 1548; 1559; 1578; 1600; 1642; 1693; 1700; 1763; 1843; 1861; 1966; 1982; 2135; 2150; 2159; 2197; 2233; 2253; 2301; 2358; 2377; 2394; 2419; 2438; 2453; 2486; 2506; 2515; 2528; 2554; 2559; 2577; 2637; 2694; 2716; 2737; 2764; 2777; 2779; 0; 0; 2; 15; 41; 48; 66; 104; 174; 197; 205; 241; 260; 282; 309; 318; 339; 363; 379; 400; 436; 465; 512; 519; 546; 576; 602; 613; 787; 870; 897; 968; 1031; 1082; 1147; 1165; 1169; 1181; 1250; 1339; 1382; 1404; 1442; 1467; 1532; 1607年; 1668; 1711; 1791; 1874; 1896; 1910; 1942; 1959; 2025; 2085; 2138; 2275; 2313; 2379; 2451; 2491; 2549; 2597; 2621; 2658; 2687; 2723; 2729; 2731; 2735; 2739; 2745; 2746; 2750; 0; 0; 5};
表二。WP2 ={0; 5; 115; 219; 262; 328; 408; 424; 531; 562; 620; 676; 781; 805; 808; 919; 1009; 1112; 1183; 1241; 1254; 1283; 1323; 1346; 1362; 1383; 1472; 1548; 1559; 1578; 1600; 1642; 1693; 1700; 1763; 1843; 1861; 1966; 1982; 2135; 2150; 2159; 2197; 2233; 2253; 2301; 2358; 2377; 2394; 2419; 2438; 2453; 2486; 2506; 2515; 2528; 2554; 2559; 2577; 2637; 2694; 2716; 2737; 2764; 2777; 2779; 2779; 0; 2; 15; 41; 48; 66; 104; 174; 197; 205; 241; 260; 282; 309; 318; 339; 363; 379; 400; 436; 465; 512; 519; 546; 576; 602; 613; 787; 870; 897; 968; 1031; 1082; 1147; 1165; 1169; 1181; 1250; 1339; 1382; 1404; 1442; 1467; 1532; 160年7, 1668; 1711; 1791; 1874; 1896; 1910; 1942; 1959; 2025; 2085; 2138; 2275; 2313; 2379; 2451; 2491; 2549; 2597; 2621; 2658; 2687; 2723; 2729; 2731; 2735; 2739; 2745; 2746; 2750; 2750; 0; 5, 115};
表二。距离= {0;114.6000000000000;3914.20000000000;7696.20000000000;4513.30000000000;7454.20000000000;8289.7000000000000;1003.40000000000;11139;2183.6000000000000;6023.80000000000;6680.40000000000;11065.1000000000;800.7000000000000;49.6000000000000;6109.9000000000000;
据此,我为表1和表2创建了一个索引,其中每当WP1和WP2为0时,我们添加一个STOP:
B =表1。WP1==0 & table1.WP2==0;
IndStopt1 =找到(B);
Bwp =表二。WP1 & table2.WP2==0;
IndStopt2 =找到(Bwp);
这些索引有相同的长度——>相同的止点数量,这很好,它应该是这样的:)
IndStopt1 = [1;8;17;24;26;28;35;45;53;57;68;75;79;81;85;96;103;108;118;125;130;136;
IndStopt2 = [1;68;143;213;225;248;293;333;397;426;474;541;561;567;606;654;721;750;802;830;
索引用于定义每个表中需要在停止之间进行匹配的行。
例如——> table1的第2行到第7行需要与表2的第2行到第67行匹配。站点被省略了。
现在我要得到table2。WC,它应该与table1一致。WC和应该是这样的:
表二。WC = {0;0;0;x;...
注意x——> table1。WP1 WP2 / WC =(0145 0),(145169 1),(169、1693、1)
但表二。WP1/WP2 =(115, 219)—>部分符合两者。这是我需要解决的特殊情况(稍后?),根据它的“边”给它赋值。这里0有30条边(145-115),1有74条边(219-145)。这需要相应的处理,但我不确定现在如何做。
表二。WC稍后将用于对table2运行。距离,其中距离只会在table2。WC是1。
所以我现在的主要问题是根据指定的索引匹配行,下一个问题将是如何处理特殊情况。
到目前为止,我已经尝试过了,但似乎并不奏效:
n = 1:表示长度(IndStopt1) - 1
k = IndStopt2((n)+1):IndStopt2((n+1)-1)
l = IndStopt1((n+1)):IndStopt1((n+1)-1)
如果table2.WP1(k) >= table1.WP1(l) &&...
table2.WP2(k) <= table1.WP2(l)
table2.WC(k) = table1.WC(l)
结束
结束
结束
结束
感谢阅读-再次强调,任何关于最佳方法的提示都非常感谢!
注意:所呈现的表和列不匹配,但应该提供关于我正在处理的内容的线索!
BRG,卢卡斯

登录发表评论。

类别

找到更多资料循环和条件语句帮助中心而且文件交换

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!