You can do this pretty easily using data.table
syntax...
# Load package
require( data.table )
# Turn 'data.frame' into 'data.table'
dt <- data.table( df )
# Make dates from date/time
dt[ , Date:= as.Date( Tpt_DateTime ) ]
# Get last row of each group
dt[ , .SD[.N] , by = c("Tpt_ID" , "Date") ]
# Tpt_ID Date Tpt_DateTime Value
#1: 1 2013-01-01 2013-01-01 11:17:21 21
#2: 2 2013-01-01 2013-01-01 07:18:32 5
#3: 3 2013-01-01 2013-01-01 08:00:02 1
#4: 1 2013-01-02 2013-01-02 07:10:11 15
#5: 2 2013-02-02 2013-02-02 12:18:32 8
#6: 3 2013-02-03 2013-02-03 14:00:02 3
First we turn your
data-time
data into a date withDate := as.Date( Tpt_DateTime )
Then we use
.SD
to get a subset of X's data for each group..N
contains the number of row for each group, so.SD[.N]
gives us the last row for each group.Lastly, the
by=c("Tpt_ID" , "Date")
defines the groups.