matlab中的Varian将多个函数应用于输入

时间:2016-08-29 11:10:54

标签: matlab grouping

我已经理解在matlab中使用varfun。我需要将meanstd应用于此表的分组变量。

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值,我需要计算按timeN分组的mut的平均值。 为此,我使用函数句柄varfun

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

我得到了:

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  

但现在我还要添加一个包含标准偏差的列。为此,我创建了一个匿名函数

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'})

不幸的是我明白了:

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

最后一栏' Fun_time'包含两个子列,第一个是分组时间的平均值,第二个是分组时间的标准偏差。

如何使用匿名函数直接拆分这两列?这与使用plyr包在R中完成的操作非常相似。

1 个答案:

答案 0 :(得分:0)

您可以使用dplyr来简化流程

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