1

我有一个每行分组观察的数据集。但是,我想将每行观察从每个重复的单个观察扩展到设定的数量(在这种情况下,每个观察为“20”个)。

在附图中,在此处输入图像描述

每个重复都是一行。我想将每一行扩展为 20。因此,“LS x SB”的“wellA”将扩展为同一行的 20。作为奖励,我还想创建一个名为“Replicate2”的新列,以数字方式列出 1 到 20,以反映每个复制的这 20 个新行。

然后这个想法将添加每个人的生存状态(反映在新列“状态”和“事件”中)。

我认为 tidyr 中的“扩展”功能具有潜力,但无法弄清楚如何为每个复制添加一个固定数量。使用“活着”列添加可变数量的观察值。

expand<-DF %>% expand(nesting(Date, Time, Cumulative.hrs, Timepoint, Treatment, Boat, Parentage, Well, Mom, Dad, Cone, NumParents, Parents), Alive)

任何帮助表示赞赏!

4

2 回答 2

1

在基础 R 中,我们可以使用rep重复行和transform添加新列

n <- 20
transform(df[rep(seq_len(nrow(df)), each = n), ], Replicate = 1:n, row.names = NULL)

使用可重现的示例n = 3

df <- data.frame(a = 1:3, b = 4:6, c = 7:9)
n <- 3
transform(df[rep(seq_len(nrow(df)), each = n), ], Replicate = 1:n, row.names = NULL)

#  a b c Replicate2
#1 1 4 7         1
#2 1 4 7         2
#3 1 4 7         3
#4 2 5 8         1
#5 2 5 8         2
#6 2 5 8         3
#7 3 6 9         1
#8 3 6 9         2
#9 3 6 9         3

使用dplyr我们可以slice用来重复行和mutate添加新列。

library(dplyr)

df %>%
  slice(rep(seq_len(n()), each = n)) %>%
  mutate(Replicate2 = rep(seq_len(n), n))
于 2019-04-29T23:49:43.553 回答
1

在现有数据和数字之间进行交叉连接1:20

tidyr::crossing(DF, replicate2 = 1:20)

如果要添加其他列,请使用mutate

... %>% mutate(status = 1, event = FALSE)
于 2019-04-30T01:04:53.673 回答