我已经理解在matlab中使用varfun。我需要将mean
和std
应用于此表的分组变量。
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
值,我需要计算按time
和N
分组的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中完成的操作非常相似。
答案 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