从表中选择聚集行

所以

我会尝试将问题写在一个列表中,以便于理解:

  • 我有一个T大小为 的 matlab 表1000x30
  • 表中名为“Class”的最后一列中的所有数据都具有一定的整数值,范围从120
  • 所以有些行会有值1,这意味着这些行是“Class1”,有些行有值2,有些行有值20等等。
  • 具有某个类的行数不等于具有另一个类的行数,因此可能有 100 行有类,1但 10 行有类2,500有类3,依此类推。

这就是我想要做的:

  • 我想获得分配给它的行数最少的类的行数。因此,假设 Class10分配给它的行数最少,count == 3而其余类分配给它们的行数超过 3。
  • 然后我将有一个名为的新列YesNo,其中只有值01.
  • 然后类中计数最少的所有行(例如本例中的类 10)都将具有值1
  • 对于具有所有其他类的其余行,我想从每个其他类中随机选择与数字最小的类相似的行数(在本例中为3)。
  • 然后对于这些随机选择的其他行,新列中的值YesNo将为,1而其余未选择的行的值为 0。
  • 所以在这个例子中,这将以一个带有1000的新列结束,其中 3*20 将有 1(3-> 分配给具有最低计数的类的行数,20-> 是类数)和 0对于其余的。

我想知道如何在 MATLAB R2015b 中做到这一点?我知道我可以使用T.YesNo = newArr;where newArris a 1000x1 doublehave01values在表中创建一个新列

作为一个小例子,如果T10x3并且只有 3 个类 ( 1,2,3),则如下所示T

ID  Name    Class   
0   'a'     3
1   'b'     2
2   'a'     2
3   'b'     2
4   'a'     3
5   'a'     1
6   'a'     1
7   'b'     2
8   'b'     1
9   'a'     2

因此,如上所示,Class3 是计数最低的一个,只有 2 行。所以我想随机选择 Class1 和 Class2 的两行,然后将这些随机选择的行的新列的值设置为,1而其余的将0如下所示:

ID  Name    Class   YesNo
0   'a'     3       1
1   'b'     2       0
2   'a'     2       1
3   'b'     2       0
4   'a'     3       1
5   'a'     1       0
6   'a'     1       1
7   'b'     2       0
8   'b'     1       1
9   'a'     2       1
魔鬼

请参阅下面的代码。它应该是不言自明的。如果有什么不清楚 - 请询问。

function q42944288
%% Definitions
MAX_CLASS = 20;
%% Setup
tmp = struct;
tmp.Data = rand(1000,1);
tmp.Class = uint8(randi(MAX_CLASS,1000,1)); % uint8 for efficiency
T = table(tmp.Data,tmp.Class,'VariableNames',{'Data','Class'});
%% Solution:
% Step 1:
[count,minVal] = min(histcounts(T.Class,'BinMethod','integers'));
% Steps 2+3:
T.YesNo = T.Class == minVal;
% Steps 4+5+6:
whichClass = bsxfun(@eq,T.Class,1:MAX_CLASS); % >=R2007a syntax
% whichClass = T.Class == 1:MAX_CLASS; % This is a logical array, >=R2016b syntax.
for indC = setdiff(1:MAX_CLASS,minVal) 
  inds = find(whichClass(:,indC));
  T.YesNo(inds(randperm(numel(inds),count))) = true; 
end
%% Test:
fprintf(1,'\nThe total number of classes is %d', numel(unique(T.Class)));
fprintf(1,'\nThe minimal count is %d',count);
fprintf(1,'\nThe total number of 1''s in T.YesNo is %d', sum(T.YesNo));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从表中选择行?

来自分类Dev

从表中选择特定的行

来自分类Dev

从表中选择随机行

来自分类Dev

如何从表中选择一列聚集并从关系表中选择所有记录[Laravel 5]

来自分类Dev

如何从表中选择一列聚集并从关系表中选择所有记录[Laravel 5]

来自分类Dev

原则-从表中选择最后4行

来自分类Dev

从审核表中选择更改的行

来自分类Dev

根据列从表中选择行

来自分类Dev

如何从表中选择最新行

来自分类Dev

从Python中的行为表中选择行

来自分类Dev

从表中选择行-Java Selenium

来自分类Dev

在Vuetify数据表中选择行

来自分类Dev

需要从Web表中选择行

来自分类Dev

在数据表中选择行

来自分类Dev

尝试从不同的表中选择行

来自分类Dev

Xpath查询以从表中选择行

来自分类Dev

原则-从表中选择最后4行

来自分类Dev

在表的多个列中选择重复的行

来自分类Dev

HTML表中选择行的Highchart

来自分类Dev

从多个表中选择行失败

来自分类Dev

从SQL Server表中选择备用行

来自分类Dev

在Laravel中从表中选择行

来自分类Dev

从每个架构的表中选择行

来自分类Dev

如何从表中选择最新的行

来自分类Dev

从表中选择取决于行值

来自分类Dev

选择*从(从表中选择*)

来自分类Dev

LARAVEL:关系“表”不存在第1行:从“表”中选择* ^(SQL:从“表”中选择*)

来自分类Dev

从具有2种选择的表中选择n行

来自分类Dev

在 Jquery 中选择和取消选择表行?