如果没有观察结果,则在使用 ddply 创建的数据框中添加一行零

Add a row of zeros in a data frame created with ddply if there are no observations

我使用函数 ddply(程序包 plyr)计算每个组 "Trial" 和 "Treatment" 的响应变量的平均值。我得到这个数据框:

Trial   Treatment   N   Mean
1           A      458  125.258
1           B      459  168.748
2           A      742  214.266
2           B      142  475.786
3           A      247  145.689
3           B      968  234.129
4           A      436  456.287

此数据框表明,在试验 4 和处理 B 中,没有对响应变量的观察(因为数据框中没有指定行)。那么,当没有给定响应变量的观测值时,是否可以在数据框中自动添加一行零(使用函数“ddply”构建)?

我想得到这个数据框:

Trial   Treatment   N   Mean
1           A      458  125.258
1           B      459  168.748
2           A      742  214.266
2           B      142  475.786
3           A      247  145.689
3           B      968  234.129
4           A      436  456.287
4           B       0   0

我们可以 merge 原始数据集与另一个 data.frame 使用 'Trial' 和 'Treatment' 中唯一值的完整组合创建的数据集。它将给出一个输出,其中缺少的组合用 NA 填充。如果需要,可以将其更改为 0(但最好将缺少的组合设置为 NA)。

res <- merge(expand.grid(lapply(df1[1:2], unique)), df1, all.x=TRUE)
is.na(res) <- res==0 

或者dplyr/tidyr,我们可以使用complete(来自tidyr

library(dplyr)
library(tidyr)
df1 %>% 
   complete(Trial, Treatment, fill= list(N=0, Mean=0))
#  Trial Treatment     N    Mean
#  (int)     (chr) (dbl)   (dbl)
#1     1         A   458 125.258
#2     1         B   459 168.748
#3     2         A   742 214.266
#4     2         B   142 475.786
#5     3         A   247 145.689
#6     3         B   968 234.129
#7     4         A   436 456.287
#8     4         B     0   0.000