2016-08-29 5 views
0

私はmatlabでvarfunの使用を理解しました。このテーブルのグループ化された変数にmeanstdを適用する必要があります。Varian in matlabは複数の関数を入力に適用します

N  mut time 
___ ___ ____ 

250 0.1 0.07 
250 0.1 0.05 
250 0.1 0.04 
250 0.1 0.03 
250 0.2 0.03 
250 0.2 0.04 
250 0.2 0.03 
250 0.2 0.05 
250 0.3 0.05 
250 0.3 0.06 
750 0.2 0.24 
750 0.3 0.29 
750 0.3  0.3 
750 0.3 0.31 
750 0.3  0.3 
750 0.4 0.33 
750 0.4 0.34 
750 0.4 0.33 
750 0.4 0.32 
750 0.5 0.38 
750 0.5 0.39 

この表はNの二つの値とmut 5つの異なる値を有し、IはNmutによってグループ化timeの平均値を計算する必要があります。

mut  N  GroupCount mean_time 
___ ___ __________ _________ 

0.1 250 4    0.0475 
0.2 250 4    0.0375 
0.2 750 1    0.24 
0.3 250 2    0.055 
0.3 750 4    0.3 
0.4 750 4    0.33 
0.5 750 2    0.385 

が、今、私はまた、標準偏差を含む列を追加したい:私は@mean

Tgroup = varfun(@mean,T,'InputVariables','time','GroupingVariables',{'N','mut'}) 

を扱う機能をvarfun機能を使用して、私が得るこれを行うには

ANS =

mut  N  GroupCount   Fun_time  
___ ___ __________ ___________________ 

0.1 250 4    0.0475  0.017078 
0.2 250 4    0.0375 0.0095743 
0.2 750 1    0.24   0 
0.3 250 2    0.055 0.0070711 
0.3 750 4    0.3  0.008165 
0.4 750 4    0.33  0.008165 
0.5 750 2    0.385 0.0070711 

最後の列:これを行うには残念ながら、私はこれを取得、私は

func = @(x)[mean(x), std(x)] 

無名関数を作成して、私はvarfunc

varfun(@(x)[mean(x),std(x)],([T(1:5:50,:);T(400:5:450,:)]),'InputVariables','time','GroupingVariables',{'mut','N'}) 

でそれを使用します'Fun_time'には2つのサブ列が含まれています。最初はグループ化された時間の平均であり、secon dはグループ化された時間の標準偏差。

これらの2つの列を無名関数を使用して直接分割するにはどうすればよいですか?これは、plyrパッケージのRで行われている処理と非常によく似ています。

+0

あなたは 'FUNC = @(x)は[平均(x)は、STD(x)は]'、すなわち[AB] MATLABであると考えていると試みることができるプロセスを簡素化するためにdplyrを使用することができますR 'のcbind(a、b)と等価です – OdeToMyFiddle

+0

これは私がすでに質問したことです。 – linello

答えて

0

あなたは

DF = read.table(text=" 
N  mut time 
250 0.1 0.07 
250 0.1 0.05 
250 0.1 0.04 
250 0.1 0.03 
250 0.2 0.03 
250 0.2 0.04 
250 0.2 0.03 
250 0.2 0.05 
250 0.3 0.05 
250 0.3 0.06 
750 0.2 0.24 
750 0.3 0.29 
750 0.3  0.3 
750 0.3 0.31 
750 0.3  0.3 
750 0.4 0.33 
750 0.4 0.34 
750 0.4 0.33 
750 0.4 0.32 
750 0.5 0.38 
750 0.5 0.39",header=TRUE) 

newDF = DF %>% 
     group_by(N,mut) %>% 
     summarise(count = n(),meanTime = mean(time),sdTime = sd(time)) %>% 
     as.data.frame() 

# > newDF 
# N mut count avgTime  avgSD 
#1 250 0.1  4 0.0475 0.017078251 
#2 250 0.2  4 0.0375 0.009574271 
#3 250 0.3  2 0.0550 0.007071068 
#4 750 0.2  1 0.2400   NaN 
#5 750 0.3  4 0.3000 0.008164966 
#6 750 0.4  4 0.3300 0.008164966 
#7 750 0.5  2 0.3850 0.007071068 
+0

私は残念なことに、Rではなく、Matlabを使用する必要があります、私はこの種のタスクではRがmatlabよりも優れていることを知っていた。 – linello

関連する問題