我有下面两个数据表,一个名为data1,另一个名为data2。左手列是分类变量,右手列是频率。我想重写这些表,但如果左手列中有缺失的类别,我希望它放入正确的缺失类别,然后在右手频率列中放入“0”。
data1 = [
1 170
2 120
3 100
4 40
5 30
6 20
7 10
9 8
10 2
11 1
14 1
];
data2 = [
1 240
2 200
3 180
4 60
5 50
6 40
7 30
8 20
9 8
10 2
12 1
19 1
];
为了更清楚,我将用一个例子来解释。在data1中,8、12和13在左边的列中丢失。我希望matlab重新创建这个表,但是8的值为0。12和13,所以它看起来如下。我还希望它在“14”之后有额外的空类别,因为data2更长,有更多的类别。我还介绍了data2填充值后的样子。
data1 = [
1 170
2 120
3 100
4 40
5 30
6 20
7 10
8 0
9 8
10 2
11 1
12 0
13 0
14 1
15 0
16 0
17 0
18 0
19 0
];
data2 = [
1 240
2 200
3 180
4 60
5 50
6 40
7 30
8 20
9 8
10 2
11 0
12 1
13 0
14 0
15 0
16 0
17 0
18 0
19 1
];
我有一些数据集,它们通常都以1、2、3、4、5等开头,但它们在左侧列中的类别略有不同,因为在缺少值的地方,它只是省略了类别,而不是放置0。我如何编写代码,以便它自动用0填充任何空白。如果代码能够识别"最高“在所有数据集之间的类别数,然后在此基础上填空。
我的目标是用长度相同的数据系列组合成一个分组条形图。
2条答案
按热度按时间qzwqbdag1#
您可以将数据集转换为表,然后使用outerjoin。然后,您可以使用fillmissing将NaN替换为您想要的任何内容。
其产生:
然后用
newTable2 = fillmissing(newTable, 'constant', 0)
得到零值,它将输出:要合并多个表,可以嵌套outerjoin,也可以编写一个函数来遍历它(参见similar Matlab forum question)。
给定OP中的
data1
和data2
,加上新的data3
:myscript.m
的内容:返回
AllJoins
:8i9zcol22#
你可以随意改变数组的最大长度,这是一个通用的答案。最大长度是
max(data1(:,1))
,但是你可以用任何方式来计算它,例如多个数组的最大值。