生成数据
mat = {{"foobar", 77},
{"faabar", 81},
{"foobur", 22},
{"faabaa", 8},
{"faabian", 88},
{"foobar", 27},
{"fiijii", 52}};
lst = {"foo", "faa"};
现在选择
r1 = Select[mat, StringMatchQ[lst[[1]], StringTake[#[[1]], 3]] &];
r2 = Select[mat, StringMatchQ[lst[[2]], StringTake[#[[1]], 3]] &];
{{lst[[1]], Total@r1[[All, 2]]}, {lst[[2]], Total@r2[[All, 2]]}}
提供
{{"foo", 126}, {"faa", 177}}
如果可以的话,我会尽力使它更加通用和实用...
编辑(1)
以下内容使其更加通用(使用与上述相同的数据):
foo[mat_, lst_] := Select[mat, StringMatchQ[lst, StringTake[#[[1]], 3]] &]
r = Map[foo[mat, #] &, lst];
MapThread[ {#1, Total[#2[[All, 2]]]} &, {lst, r}]
提供
{{"foo", 126}, {"faa", 177}}
所以,如果lst被更改为3个项目,上面的相同代码现在将起作用:
lst = {"foo", "faa", "fii"}