【问题标题】:Add a row of zeros in a data frame created with ddply if there are no observations如果没有观察值,则在使用 ddply 创建的数据框中添加一行零
【发布时间】:2016-02-21 05:46:25
【问题描述】:

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

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

【问题讨论】:

  • 您可以尝试在ddply 中包含.drop = FALSE

标签: r plyr


【解决方案1】:

我们可以merge 将原始数据集与另一个使用“试用”和“治疗”中唯一值的完整组合创建的数据集。它将给出一个用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 2023-02-20
    • 2013-07-12
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多