Вот моя интерпретация.
Вы начинаете с data.frame
, который выглядит следующим образом. (Я добавил дополнительное значение вне порядка в data.frame
, поэтому мой ответ будет отличаться от вашего).
mydf <- data.frame(ID = c("ID1", "ID1", "ID2", "ID2", "ID3", "ID3"),
Date = c("Mar 01", "Mar 02", "Mar 03", "Mar 04", "Mar 05", "Mar 04"))
mydf
# ID Date
# 1 ID1 Mar 01
# 2 ID1 Mar 02
# 3 ID2 Mar 03
# 4 ID2 Mar 04
# 5 ID3 Mar 05
# 6 ID3 Mar 04
Во-первых, создайте фактические объекты «даты» из столбца «Дата». Я предположил, что ваш формат даты «mon day», поэтому я использовал "%b %d"
в strptime
. Поскольку нет года, предполагается текущий год.
Date2 <- strptime(mydf$Date, format="%b %d") ## ASSUMES THE CURRENT YEAR
Date2
# [1] "2013-03-01" "2013-03-02" "2013-03-03" "2013-03-04" "2013-03-05" "2013-03-04"
Далее, найдите функцию, которая позволяет нам заказывать эти даты с помощью переменной «ID». В базе R, ave
делает это довольно удобно.
ave(as.numeric(Date2), mydf$ID, FUN = order)
# [1] 1 2 1 2 2 1
Используйте эти значения для подмножества строк с первой (самой низкой) значения для каждого идентификатора (то есть, когда результат равен «1»).
mydf[ave(as.numeric(Date2), mydf$ID, FUN = order) == 1, ]
# ID Date
# 1 ID1 Mar 01
# 3 ID2 Mar 03
# 6 ID3 Mar 04
Не могли бы вы разместить данные, которые у вас есть на самом деле? Являются ли идентификаторы и даты независимыми векторами? 'dput()' ваш друг ... – vaettchen
Пожалуйста, также покажите нам код, который вы пробовали, и почему он не работает. Благодаря! – Henrik