我有一列数据,对于不同的愤怒,我想用一定的值替换此列的值。例如,对于6到15之间的所有值,我想用10替换。对于16到25之间的所有值,我想用20等替换。最简单的方法是什么? 感谢
答案 0 :(得分:1)
逻辑索引:
y=rand(1, 50)
y(y>0.5) = 1
y
以上将y
大于0.5的元素替换为1
您也可以使用find
,但逻辑索引是显而易见的方法。
答案 1 :(得分:1)
如果在你的例子中都是如此,你可以使用它:
y=randint(100,1,1309)+1; % generate data sample
y=10*floor((y+4)/10) % 'round' to 10
答案 2 :(得分:0)
看起来你想要进行一些分箱,并用该范围的“中值”值替换某个范围内的值?以下是要遵循的基本原则的代码。使用HISTC。您可能需要在下面更改的唯一内容是“边缘”,否则,这应该可以解决问题:
x = round(rand(1,1000)*1400); % Sample data
intervalSize = 10; % 5 to 15, 15 to 25 etc.
maxEdge = max(x) + intervalSize - mod(max(x), intervalSize);
edges = 0:intervalSize:max(x);
[n bin] = histc(x,edges); % Don't really need 'n'
for i = 1: (numel(edges) - 1)
midValue = mean([edges(i) edges(i+1)]);
x(bin == i) = midValue;
end
这是另一种不使用HISTC的方法,但纯粹依赖于逻辑索引。
%% Approach 2:
x = round(rand(1,1000)*1400); % Sample data
intervalSize = 10;
maxEdge = max(x) + intervalSize - mod(max(x), intervalSize);
edges = 0:intervalSize:max(x);
for i = 1: (numel(edges) - 1)
midValue = mean([edges(i) edges(i+1)]);
x(x >= edges(i) & x < edges(i+1)) = midValue;
end
您可能需要调整逻辑索引条件以获得您想要的内容,但您明白了。
答案 3 :(得分:0)
我认为这是最简单的方法。
a = rand(1308, 1)*1308; % replace with your column
target = [10 20]; % replace with your targets and ranges
left = [6 15];
right = [16 25];
for i=1:length(target)
a(a>=left(i)&a<right(i)) = target(i);
end