R语言 如何创建一个新列来计算某个值在另一列中出现的次数并按日期对它们进行排序

8iwquhpp  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个标题为“日期”和“ID”的2列数据框。有些ID不止一次列出。我想创建一个新列“尝试”,表示每个ID尝试的次数,按发生日期排序。
以下是我的示例数据:

ID <- c(1,2,5,8,4,9,1,11,15,32,54,1,4,2,14)
Date <- c("2021-04-12", "2021-04-12", "2021-04-13", "2021-04-14", "2021-04-19", 
          "2021-04-19", "2021-04-20", "2021-04-21", "2021-04-22", "2021-04-28", 
          "2021-04-28", "2021-04-29", "2021-04-29", "2021-05-06", "2021-05-07")

Data <- data.frame(ID, Date)
Data$Date <- as.Date(Data$Date, format="%Y-%m-%d")

我尝试了duplicated()的多次迭代,我可以删除所有重复的值,或者创建重复值“2”或“3”的每个示例,但是我希望每个示例都根据尝试的日期排序,下面是我期望添加到原始数据框中的结果列:

Attempt <- c(1,1,1,1,1,1,2,1,1,1,1,3,2,2,1)
xzlaal3s

xzlaal3s1#

Data %>%
  group_by(ID)
  mutate(Attempt1 = row_number())

   ID       Date Attempt
1   1 2021-04-12       1
2   2 2021-04-12       1
3   5 2021-04-13       1
4   8 2021-04-14       1
5   4 2021-04-19       1
6   9 2021-04-19       1
7   1 2021-04-20       2
8  11 2021-04-21       1
9  15 2021-04-22       1
10 32 2021-04-28       1
11 54 2021-04-28       1
12  1 2021-04-29       3
13  4 2021-04-29       2
14  2 2021-05-06       2
15 14 2021-05-07       1

如果您有最新版本的dplyr,请使用

Data %>%
   mutate(Attempt = row_number(), .by = ID)
6ojccjat

6ojccjat2#

使用data.table

library(data.table)
setDT(Data)[, Attempt := rowid(ID)]
  • 输出
> Data
    ID       Date Attempt
 1:  1 2021-04-12       1
 2:  2 2021-04-12       1
 3:  5 2021-04-13       1
 4:  8 2021-04-14       1
 5:  4 2021-04-19       1
 6:  9 2021-04-19       1
 7:  1 2021-04-20       2
 8: 11 2021-04-21       1
 9: 15 2021-04-22       1
10: 32 2021-04-28       1
11: 54 2021-04-28       1
12:  1 2021-04-29       3
13:  4 2021-04-29       2
14:  2 2021-05-06       2
15: 14 2021-05-07       1

相关问题