在每个组中添加一个新行(天)

Add a new row in each group (Day)

我正在尝试使用这些数据创建一个函数,非常感谢对此的帮助!

    example<- data.frame(Day=c(2,4,8,16,32,44,2,4,8,16,32,44,2,4,8,16,32,44),
          Replicate=c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,
                      1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,
                      1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3),
          Treament=c("CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC","CC",
                     "HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP","HP",
                     "LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL","LL"),
          AFDM=c(94.669342,94.465752,84.897023,81.435993,86.556221,75.328294,94.262162,88.791240,75.735474,81.232403,
                 67.050593,76.346244,95.076522,88.968823,83.879073,73.958836,70.645724,67.184695,99.763156,92.022673,
                 92.245362,74.513934,50.083136,36.979418,94.872932,86.353037,81.843173,67.795465,46.622106,18.323099,
                 95.089932,93.244212,81.679814,65.352385,18.286525,7.517794,99.559972,86.759404,84.693433,79.196504,
                 67.456961,54.765706,94.074014,87.543693,82.492548,72.333367,51.304676,51.304676,98.340870,86.322153,
                 87.950873,84.693433,63.316485,63.723665))

示例:

我想插入一个新行,其中包含使用另一个函数计算的 AFDM 值(例如 0.9823666)。

这个新行必须在每个第 2 天(并将其称为第 0 天),我想保留每个副本的名称和每个组的处理。

因此,这个新行必须是:Day 0, Replicate=same, Treatment=same, AFDM=0.9823666

这样我以后就可以 运行 对数据进行回归(从 0 到 44,每个处理重复 3 次)。

我更喜欢 dplyr 上的解决方案。

提前致谢

我们可以使用 cumsum 创建一个分组列,然后使用 completefill 其他列

扩展数据集
library(dplyr)
library(tidyr)     
example %>%
    group_by(grp = cumsum(Day == 2)) %>% 
    complete(Day =  c(0, unique(Day)), fill = list(AFDM = 0.9823666)) %>%
    fill(Replicate, Treament, .direction = 'updown')
# A tibble: 63 x 5
# Groups:   grp [9]
#     grp   Day Replicate Treament   AFDM
#   <int> <dbl>     <dbl> <chr>     <dbl>
# 1     1     0         1 CC        0.982
# 2     1     2         1 CC       94.7  
# 3     1     4         1 CC       94.5  
# 4     1     8         1 CC       84.9  
# 5     1    16         1 CC       81.4  
# 6     1    32         1 CC       86.6  
# 7     1    44         1 CC       75.3  
# 8     2     0         2 CC        0.982
# 9     2     2         2 CC       94.3  
#10     2     4         2 CC       88.8  
# … with 53 more rows

您可以使用 distinct 获得唯一的 ReplicateTreament,添加具有默认值的 DayAFDM 列并将行绑定到原始数据框。

library(dplyr)

example %>%
  distinct(Replicate, Treament) %>%
  mutate(Day = 0, AFDM = 0.9823666) %>%
  bind_rows(example) %>%
  arrange(Replicate, Treament)

#   Replicate Treament Day       AFDM
#1          1       CC   0  0.9823666
#2          1       CC   2 94.6693420
#3          1       CC   4 94.4657520
#4          1       CC   8 84.8970230
#5          1       CC  16 81.4359930
#6          1       CC  32 86.5562210
#7          1       CC  44 75.3282940
#8          1       HP   0  0.9823666
#9          1       HP   2 99.7631560
#10         1       HP   4 92.0226730
#.....