我使用函数ddply(package plyr) 来计算每组“试验”和“治疗”的响应变量的平均值。我得到这个数据框:
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\nRun Code Online (Sandbox Code Playgroud)\n\n该数据框表明,在试验 4 和治疗 B 中,没有响应变量的观察结果(因为数据框中没有指定行)。那么,当给定的响应变量没有观测值时,是否可以在数据框中自动添加一行零(使用函数 \xe2\x80\x9cddply\xe2\x80\x9d 构建)?
\n\n我想得到这个数据框:
\n\nTrial 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\nRun Code Online (Sandbox Code Playgroud)\n
我们可以将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)