如何在同一天内为重复项添加具有更改 ID 名称的列

问题描述 投票:0回答:1

我有一个数据框,其中包含每天几个样本的天数、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。所以我有点迷茫,希望能得到一些帮助!

r dataframe duplicates mutate
1个回答
1
投票

也许是这样的?

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 = '-'))
© www.soinside.com 2019 - 2024. All rights reserved.