r - 在 R 中匹配多个日期值

标签 r matching plyr

我有以下数据框 DF 描述了在特定日期从事项目的人员:

ID    ProjectName    StartDate 
1       Health        3/1/06 18:20
2       Education     2/1/07 15:30
1       Education     5/3/09 9:00
3       Wellness      4/1/10 12:00
2       Health        6/1/11 14:20

目标是找到每个ID对应的第一个项目。例如,预期输出如下:
ID    ProjectName    StartDate 
1       Health        3/1/06 18:20
2       Education     2/1/07 15:30
3       Wellness      4/1/10 12:00

到目前为止,我已完成以下操作以获取每个 ID 的第一个 StartDate:
sub <- ddply(DF, .(ID), summarise, st = min(as.POSIXct(StartDate)));

在此之后,我需要将 sub 中的每一行与原始 DF 匹配并提取与该 ID 和 StartDate 对应的项目。这可以在 sub 中的每一行的循环中完成。但是,我的数据集非常大,我想知道是否有一种有效的方法来进行此匹配并从 DF 中提取此子集。

最佳答案

这是一个 data.table解决方案,这应该是非常有效的。

DF <- data.frame(ID=c(1,2,1,3,2,1), ProjectName=c('Health', 'Education', 'Education', 'Wellness', 'Health', 'Health'),
             StartDate=c('3/1/06 18:20', '2/1/07 15:30', '5/3/09 9:00', '4/1/10 12:00', '6/1/11 14:20', '1/1/06 11:10'))

请注意,我已经修改了您的数据,在最后添加了另一个元素,因此不再对日期进行排序。因此输出不同。
d <- as.data.table(DF)

# Order by StartDate and take the first ID.
# Assumes that your dates are month/day/year.

d[order(as.POSIXct(StartDate, format="%m/%d/%y %H:%M"))][,.SD[1,],by=ID]
##    ID ProjectName    StartDate
## 1:  1      Health 1/1/06 11:10
## 2:  2   Education 2/1/07 15:30
## 3:  3    Wellness 4/1/10 12:00

如果您的日期已经排序(如您的示例),这就足够了:
d[,.SD[1,],by=ID]

关于r - 在 R 中匹配多个日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256342/

相关文章:

r - 在 R 中使用循环执行多重生存分析

r - 使用 ifelse() 识别数据中不一致的响应

string - awk中不区分大小写的字符串匹配

php & mysql 订阅搜索/匹配查询

elasticsearch - Elasticsearch文字匹配百分比

r - 基于列类型的数据框中的子集变量

R 如何滞后 4000 列 50 次

javascript - 如何动态地将视频字幕轨道设置为默认轨道

r - 不使用ddply和merge计算 "group characteristics"

r - R 数据框子集取决于重复变量的值