1

我有一个dataset对象ds,它有A,BC在它的“变量”(又名“列”)中。

对于 中的每个r“行”(又名“观察”) ,我可以从、和fords的值构造一个“签名” (例如,作为一个元胞数组)。ABCr

通常,多个“行”ds可以具有相同的签名。因此,就目前而言,这个签名不能被解释为存储在 中的观察表的“键” ds,但我可以扩展签名以包含一个额外的(新)变量D,表示该行的特定组合的次数A-、B- 和 -值“到目前为止”C已经出现在数据集中(即,当一个人迭代数据集中的行/观察值时)。但是,要做到这一点,我需要能够遍历 的“行” ,但我无法弄清楚如何去做。ds

有人可以告诉我如何迭代数据集的观察)吗?

D(我意识到这样的迭代可能很慢,但如果我要构造新的“变量”/“列” ,我想不出任何办法。)

4

2 回答 2

2

您可以将数据集视为非常像标准 matlab 结构,如文档中的示例所示。因此,对于您的情况,您可以执行以下操作:

count = containers.Map();
D = cell(1, size(ds,1));
for i = 1:size(ds,1) %for each observation
    signature = [ds.A(i) ds.B(i) ds.C(i)]; %or however you wish to generate the sig

    occurences = 1; %assuming we have not seen it before, we have one occurence
    if count.isKey(signature) %if we have seen it before
        occurences = count[signature] + 1; %add one to the old count
    end
    D{i} = [signature occurences]; %make the complete signature
    count[signature] = occurences; %update our count map
end
ds.D = D; %add the new variable to the map.
于 2013-05-16T14:50:42.637 回答
1

assuming ds is a 2D matrix with 3 columns, you can simply use for loop

for rowIndex = 1:size(ds,1) % number of rows
    A = ds(ri,1); 
    B = ds(ri,2);
    C = ds(ri,3);
    % ....
end
于 2013-05-16T14:40:39.280 回答