2013-11-09 4 views
0

Нужна помощь с помощью простой команды r, чтобы сделать что-то, что делается через pivots в excel. У меня есть таблица с 2 переменными ID и датой. Мне нужна команда, которая может создать фреймворк данных, который имеет уникальный список этих идентификаторов и минимальную дату для ID.поиск минимума в столбце на основе уникального идентификатора в r

, например, сказать, что мой кадр данных транспонировать из (Идентификатор списка Col 1 и Дата2 в седловине 2)

ID: ID1 ID1 ID2 ID2 ID3 
Date: Mar 01 Mar 02 Mar03 Mar 04 Mar 05 

мне нужен кадр данных, который дает

ID1 Mar01 
ID2 Mar03 
ID3 Mar05 
+2

Не могли бы вы разместить данные, которые у вас есть на самом деле? Являются ли идентификаторы и даты независимыми векторами? 'dput()' ваш друг ... – vaettchen

+0

Пожалуйста, также покажите нам код, который вы пробовали, и почему он не работает. Благодаря! – Henrik

ответ

0

Ключ здесь следует использовать as.Date для типа данных даты и использовать один из форматов, приведенных здесь, для форматов, см. ?format.Date. Давайте создадим пример таблицы ввода: df_input<-data.frame(ID=sample(1:5), Date=as.Date(sample(c("2012-10-03", "2012-11-03", "2012-12-03"), size= 5,replace=T))) Теперь используйте sort для сортировки входных данных. Нравится: sort(df_input$Date)

Отличный день! Кроме того, если вам нужна помощь при импорте файла, попробуйте это: Unable to import data from a sample Excel file

+0

Пример OPs имеет повторяющиеся идентификаторы; и они хотят выбрать подмножество данных, а не просто сортировать их, я думаю. Зачем делать новый пример, когда он уже есть? – Frank

+1

:) Я пропустил этот момент! Но может быть исправлено с помощью 'duplicated()'. Я буду ждать комментариев OP перед публикацией. – user2217564

0

Вот моя интерпретация.

Вы начинаете с 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 
Смежные вопросы