如果没有观察结果,则在使用 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
我使用函数 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