假设我的数据如下:
Name Date
Bank1 1/1/2005
Bank1 6/1/2005
Bank1 1/1/2006
Bank1 6/1/2006
Bank1 1/1/2007
Bank2 6/1/2006
Bank2 1/1/2007
Bank3 6/1/2005
Bank3 1/1/2006
Bank3 6/1/2006
Bank3 1/1/2007
....
Run Code Online (Sandbox Code Playgroud)
这里的第一个日期是2005年1月1日,最后一个日期是1/1/2007.我想分配一个ID,我有:
Name Date ID
Bank1 1/1/2005 1
Bank1 6/1/2005 2
Bank1 1/1/2006 3
Bank1 6/1/2006 4
Bank1 1/1/2007 5
Bank2 6/1/2006 4
Bank2 1/1/2007 5
Bank3 6/1/2005 2
Bank3 1/1/2006 3
Bank3 6/1/2006 4
Bank3 1/1/2007 5
....
Run Code Online (Sandbox Code Playgroud)
我基本上想要为与所有日期的顺序相对应的日期分配ID.此外,Bank1拥有所有日期的完整列表.我想知道data.table中是否有一种简单的方法可以做到这一点.我尝试过像循环这样的东西但是在更高的尺寸上变得更难.任何建议将不胜感激,谢谢!
我想你正在寻找特殊符号.GRP:
dt[, id := .GRP, by=Date]
# Name Date id
# 1: Bank1 1/1/2005 1
# 2: Bank1 6/1/2005 2
# 3: Bank1 1/1/2006 3
# 4: Bank1 6/1/2006 4
# 5: Bank1 1/1/2007 5
# 6: Bank2 6/1/2006 4
# 7: Bank2 1/1/2007 5
# 8: Bank3 6/1/2005 2
# 9: Bank3 1/1/2006 3
# 10: Bank3 6/1/2006 4
# 11: Bank3 1/1/2007 5
Run Code Online (Sandbox Code Playgroud)
这是一个dplyr解决方案:
library(dplyr)
df %>%
select(Date) %>%
slice(unique(Date)) %>%
mutate(ID = row_number(as.Date(Date, format = "%d/%m/%Y"))) %>%
left_join(df, .) %>%
arrange(Name)
Run Code Online (Sandbox Code Playgroud)
这使:
#Joining by: "Date"
# Name Date ID
#1 Bank1 1/1/2005 1
#2 Bank1 6/1/2005 2
#3 Bank1 1/1/2006 3
#4 Bank1 6/1/2006 4
#5 Bank1 1/1/2007 5
#6 Bank2 6/1/2006 4
#7 Bank2 1/1/2007 5
#8 Bank3 6/1/2005 2
#9 Bank3 1/1/2006 3
#10 Bank3 6/1/2006 4
#11 Bank3 1/1/2007 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |