R 如何根据时间戳获取每个ID的最新行
我需要每个组具有最新时间值的行。我有多个行和列。输入数据如下所示:R 如何根据时间戳获取每个ID的最新行,r,date,R,Date,我需要每个组具有最新时间值的行。我有多个行和列。输入数据如下所示: view(DF) ID Value1 Value2 Value3 Value4 Time 1 1 7 13 19 2013-11-15 21:12:03:337 1 2 8 14 20 2013-12-23 15:12:01:227 2 3 9 15 21 2014-12-07 14:37:01:127 2 4 10 16 22 2013-12-12 05
view(DF)
ID Value1 Value2 Value3 Value4 Time
1 1 7 13 19 2013-11-15 21:12:03:337
1 2 8 14 20 2013-12-23 15:12:01:227
2 3 9 15 21 2014-12-07 14:37:01:127
2 4 10 16 22 2013-12-12 05:23:01:239
3 5 11 17 23 2011-12-25 15:12:01:227
3 6 12 18 24 2011-12-25 15:12:02:227
我需要这样的结果:
ID Value1 Value2 Value3 Value4 Time
1 2 8 14 20 2013-12-23 15:12:01:227
2 3 9 15 21 2014-12-07 14:37:01:127
3 6 12 18 24 2011-12-25 15:12:02:227
我已经查看了community.rstudio.com/t/replacement-all-null-values-in-a-dataset-code-issue/11285上提供的解决方案
我试过了
DF_filter = DF%>%
group_by(ID) %>%
slice(which.max(Time))
此外,我还尝试通过以下方式转换时间戳中的时间列:
DF_time <- strptime(x=as.character(DF$Time), format = "%y-%m-%d %H%M:S")
但是DF_时间又回来了
第一个代码返回一个具有0 obs的数据DF_过滤器。和6个变量。
请提供帮助。a data.table方法
DF_filter <- DF %>%
inner_join((DF %>% group_by(ID) %>% summarise(Time=max(Time))),
by=c('ID'= 'ID', 'Time' = 'Time'))
样本数据
输出
数据表方法
样本数据
输出
正确格式化时间变量后: 使用base: 或者:
merge(aggregate(Time ~ ID, data = df, FUN = max), df)
正确格式化时间变量后: 使用base: 或者:
merge(aggregate(Time ~ ID, data = df, FUN = max), df)
您可以按日期排序,然后使用dplyr中的last。您可以按日期排序,然后使用dplyr中的last。这很有效,但我不知道为什么,但它缺少一行。例如,当使用@clemsang对原始问题的注释进行计算时,过滤后的数据应为2560行,但使用您的代码,我得到2559行。每个唯一ID应得到一行。因此,请检查lengthuniqueDF$ID。它返回什么?这是有效的,但我不知道为什么,但它缺少一行。例如,当使用@clemsang对原始问题的注释进行计算时,过滤后的数据应为2560行,但使用您的代码,我得到2559行。每个唯一ID应得到一行。因此,请检查lengthuniqueDF$ID。它返回什么?
# ID Value1 Value2 Value3 Value4 Time
# 1: 1 2 8 14 20 2013-12-23 15:12:01
# 2: 2 3 9 15 21 2014-12-07 14:37:01
# 3: 3 6 12 18 24 2011-12-25 15:12:02
do.call(rbind, lapply(
split(df, df$ID),
function(x) x[which.max(x$Time), ]
))
merge(aggregate(Time ~ ID, data = df, FUN = max), df)