我有一个数据框,其中包含每天几个样本的天数、ID、收集日期和计数值(孵化蛋的数量)。 ID 源于从中提取样本(一些鸡蛋)的复制品(母亲),因此它需要来自“收集日期”列的信息,以便将它们区分为例如图中的单独样本。
我想添加一个名为 sampleID 的新列,我在其中为每个唯一样本提供了自己的 ID。
示例数据:
d1 <- as.Date.POSIXct(2021-06-07)
d2 <- as.Date.POSIXct(2021-06-08)
d3 <- as.Date.POSIXct(2021-06-09)
df <- data.frame(Days = c(1,1,2,2,2,2,3,3,3,3,3),
ID = c(2,5,2,2,5,9,2,2,5,5,9),
Collected =c(d1,d1,d2,d1,d1,d2,d1,d2,d1,d3,d2))
我希望输出看起来像:
天 | ID | 收集 | 样品编号 | 计数 |
---|---|---|---|---|
1 | 2 | 2021-06-07 | 2-1 | 3 |
1 | 5 | 2021-06-07 | 5-1 | 5 |
2 | 2 | 2021-06-08 | 2-1 | 4 |
2 | 2 | 2021-06-07 | 2-2 | 1 |
2 | 5 | 2021-06-07 | 5-1 | 7 |
2 | 9 | 2021-06-08 | 9-1 | 2 |
3 | 2 | 2021-06-07 | 2-1 | 8 |
3 | 2 | 2021-06-08 | 2-2 | 5 |
3 | 5 | 2021-06-07 | 5-1 | 7 |
3 | 5 | 2021-06-09 | 5-2 | 2 |
3 | 9 | 2021-06-08 | 9-1 | 2 |
我一直在尝试类似的东西:
df <- df %>%
group_by(Days) %>%
mutate(ReplicateID = case_when(ID == ID & Collected != Collected ~ paste(as.character(ID)+"-1")))
这是行不通的,但即使它行得通,也无法将 -2 或 -3 添加到同一天内重复多次的 ID。所以我有点迷茫,希望能得到一些帮助!
也许是这样的?
library(dplyr)
d1 <- as.Date('2021-06-07')
d2 <- as.Date('2021-06-08')
d3 <- as.Date('2021-06-09')
df <- data.frame(Days = c(1,1,2,2,2,2,3,3,3,3,3),
ID = c(2,5,2,2,5,9,2,2,5,5,9),
Collected =c(d1,d1,d2,d1,d1,d2,d1,d2,d1,d3,d2))
df |>
arrange(Days,ID,Collected) |>
group_by(Days,ID) |>
mutate(SampleID = paste(ID,row_number(),sep = '-'))