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

Nel*_*ell 2 r plyr

我使用函数ddply(package plyr) 来计算每组“试验”和“治疗”的响应变量的平均值。我得到这个数据框:

\n\n
Trial   Treatment   N   Mean\n1           A      458  125.258\n1           B      459  168.748\n2           A      742  214.266\n2           B      142  475.786\n3           A      247  145.689\n3           B      968  234.129\n4           A      436  456.287\n
Run Code Online (Sandbox Code Playgroud)\n\n

该数据框表明,在试验 4 和治疗 B 中,没有响应变量的观察结果(因为数据框中没有指定行)。那么,当给定的响应变量没有观测值时,是否可以在数据框中自动添加一行零(使用函数 \xe2\x80\x9cddply\xe2\x80\x9d 构建)?

\n\n

我想得到这个数据框:

\n\n
Trial   Treatment   N   Mean\n1           A      458  125.258\n1           B      459  168.748\n2           A      742  214.266\n2           B      142  475.786\n3           A      247  145.689\n3           B      968  234.129\n4           A      436  456.287\n4           B       0   0\n
Run Code Online (Sandbox Code Playgroud)\n

akr*_*run 5

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

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

或者通过dplyr/tidyr,我们可以使用complete(from 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
Run Code Online (Sandbox Code Playgroud)