我将尝试将我的问题写在一个列表中以便更容易理解:
- 我有一个
T
大小为 matlab 的表1000x30
。 - 表中名为“类”的最后一列中的所有数据都有一定的整数值,范围从
1
到20
。 - 因此,有些行将具有值
1
,这意味着这些行属于“Class1”,有些行将具有该值2
,有些将具有该值20
,依此类推。 - 具有某个类的行数不等于具有另一个类的行数,因此可能有 100 行有类
1
,但有 10 行有类2
,500行有类3
等等。
这就是我想要做的:
- 我想获得分配给它的行数最少的类的行数。因此,假设 Class
10
分配给它的行最少,count == 3
而其余的类分配给它们的行超过 3 行。 - 然后我将有一个名为的新列
YesNo
,其中只有值0
或1
。 - 然后计数最少的类的所有行(例如本例中的 10 类)都将具有值
1
。 - 对于所有其他类的其余行,我想从每个其他类中随机选择与具有最低编号的类相似的行数(在本例中为
3
)。 - 然后对于这些随机选择的其他类的行,新列中的值
YesNo
将是1
,而其余未选择的行将是 0。 - 所以在这个例子中,这将以一个带有
1000
值的新列结束,其中 3*20 将有 1(3-> 分配给具有最低计数的类的行数,20-> 是类数)和 0对于其余的。
我想知道如何在 MATLAB R2015b 中做到这一点?我知道我可以使用T.YesNo = newArr;
where newArr
is a 1000x1 double
having0
和1
values 在表中创建一个新列。
作为一个小例子,如果T
是10x3
并且只有 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