2013-05-16 12 views
7

का मतलब के लिए cellfun का उपयोग करते हुए मैं एक सेल है अब तक मुझे यह करना है ...सेल

figure('color',[1 1 1]) 
titles={'Direct care','Housekeeping','Mealtimes','Medication rounds','Miscellaneous care','Personal care'}; 

for care=1:6 
    subplot(3,2,care) 
    clear a m e pci1 pci2 gn 
for position=1:4 
    for patient=1:4 
a(:,:,position,patient,care)=cell2mat(BED4{care}{position}{patient}); 
    end 
end 

m=mean(mean(a(:,1,:,:,care),4),3); 
e=mean(mean(a(:,2,:,:,care),4),3); 
pci1=mean(mean(a(:,3,:,:,care),4),3); 
pci2=mean(mean(a(:,4,:,:,care),4),3); 
gn=a(:,5,1,1,care); 
if care==1 
    b={m,e,pci1,pci2,gn}; %store for posterity 
end 

h=errorbar(gn,m,e,'sr'); 

set(h,'linestyle','--','LineWidth',2,... 
       'MarkerEdgeColor','k',... 
       'MarkerFaceColor','white',... 
       'MarkerSize',5); 
ylabel('Relative Risk '); 
xlabel('Patient contact count'); 
title(titles{ii}) 
set(gca,'xtick',0:2:8) 
axis([-2 8 0 1]) 
end 

जो देता है:

enter image description here

+8

हाथ से तैयार आंकड़ों के लिए हमेशा एक +1 :) –

+3

@RodyOldenhuis कलम के लिए +1! पतली काला कलम के साथ मोटी लाल तीरों को चित्रित करने के लिए – Shai

+3

+1। (क्या यह पहले से ही जादू के रूप में गिना जाता है?) –

उत्तर

1

यह आसान अगर आप पहले आयाम (care) को अलग करने के लिए अपने डेटा नयी आकृति प्रदान है:

C = reshape(BED4, size(BED4, 1), 1); 

प्रत्येक पंक्ति care का एक अलग मूल्य से मेल खाती है। चलो एक 3 डी मैट्रिक्स के रूप में प्रत्येक पंक्ति में कोशिकाओं की सामग्री ढेर और वांछित मतलब मान प्राप्त:

res = cell(size(C, 1), 1);    %// Preallocate memory 
for care = 1:size(C, 1) 
    X = vertcat(C{care, :});    %// Obtain content from row 
    func = @(k)mean(cat(3, X{:, k}), 3); %// Stacks content and obtains mean 
    res{care} = arrayfun(func, 1:size(X, 2), 'UniformOutput', 0); 
end 

जिसके परिणामस्वरूप सेल सरणी res सभी वांछित मतलब मान होने चाहिए।

+1

बहुत अच्छा! आपका बहुत बहुत धन्यवाद! हाथ चित्र मुझे देखने में मदद करते हैं कि डेटा कैसा दिखता है, अगर मैं केवल हाथ से (सचमुच) इसे संचालन कर सकता हूं। – HCAI