2017-09-21 33 views
0

我想計算的總收入在一間店鋪,每30分鐘,提取值

我有一個數據集,如:

hour minute price 

0  1  12,5 
0  1  10 
0  2  15 
0  3  15 

我試圖實現像共計這個:

[rows,cols,vals] = find(0 < data(:,2) & data(:,2) < 31); 

但不能得到我想要的。

回答

0

你應該使用邏輯索引,以獲得30分鐘的範圍內,價格:

data(0 < data(:,2) & data(:,2) < 31, 3) 

爲什麼你所期望的發現沒有做?

find作品下列算式0 < data(:,2) & data(:,2) < 31,即[1 1 1 1].'的結果,它不知道原始矩陣data什麼。因此,第二個和第三個參數在這種情況下是無用的。他們將是有用的獲得nonzero elements in a matrix

爲A(低效率)的替代邏輯索引,你可以得到相同的結果如下:

data(find(0 < data(:,2) & data(:,2) < 31), 3) 

選擇特定的小時

目前,您所選擇的價格每小時的上半場。至00:00和00:30之間進行選擇,例如價格,你可以使用以下命令:

data(data(:,1) == 0 && 0 < data(:,2) & data(:,2) < 31, 3) 
+0

感謝,但我不工作,因爲它返回第2小時,第3小時,第4小時......等等。我想在00:00 - 00:30,00:30-1:00,1:00 - 1:30之間添加數值.... –

+0

當然,您應該在第一列添加附加條件。 – m7913d

0

我找到了解決方案的快速回答

data(:,2) =((data(:,2) ./ 30) + 1); 
data(:,2)= floor(data(:,2)); 
changes = find(diff(data(:,2)))+1; 

for i=1:1:(length(changes) -1) 
A(i)=sum(data(changes(i):changes(i+1),3)) 
end