2015-09-17 3 views
3

Я использую R и Dplyr и набор данных, который имеет один столбец с информацией о дате/времени, один столбец с номерами телефонов и одним столбцом, который имеет два варианта: яйца и сыр.Использование даты/времени для фильтрации в R

 Date Phone.Number Eggs.or.Cheese 
1 14/09/15 1111111111   EGGS 
2 14/09/15 2222222222   EGGS 
3 14/09/15 3333333333   EGGS 
4 15/09/15 4444444444   EGGS 
5 15/09/15 5555555555   EGGS 
6 16/09/15 1111111111   CHEESE 
7 16/09/15 6666666666   EGGS 
8 16/09/15 7777777777   EGGS 

(Dput информация здесь):

structure(list(Date = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 
     3L), .Label = c("14/09/15", "15/09/15", "16/09/15"), class = "factor"), 
      Phone.Number = c(1111111111, 2222222222, 3333333333, 4444444444, 
      5555555555, 1111111111, 6666666666, 7777777777), Eggs.or.Cheese = structure(c(2L, 
      2L, 2L, 2L, 2L, 1L, 2L, 2L), .Label = c("CHEESE", "EGGS"), class = "factor")), .Names = c("Date", 
     "Phone.Number", "Eggs.or.Cheese"), class = "data.frame", row.names = c(NA, 
     -8L)) 

Я пытаюсь создать подмножество, которое включает в себя все номера телефонов, которые указаны яйца в прошлом, а затем назвали сыр. Это подмножество будет включать каждое наблюдение за этими номерами телефонов и будет выглядеть примерно так.

 Date Phone.Number Eggs.or.Cheese 
1 14/09/15 1111111111   EGGS 
2 16/09/15 1111111111   CHEESE 

Я играл с фильтрами, но я не уверен в том, как использовать информацию даты и времени в пределах команд

Кроме того, я еще новичок в R, кодирования и stackfoverflow, так что любая обратная связь о том, как я задаю вопросы, будет оценено по достоинству.

+0

не лучше иметь 'date' как фактический' date' класс, чтобы вы могли заказать по нему? –

+0

Скорее всего, как бы я это сделал? – Lyriss

+0

Кроме того, вас беспокоит порядок появления? Если, например, «CHEESE» появился до «EGGS» для какого-то номера телефона, вы тоже хотите его выбрать? –

ответ

3

Произошла попытка использования data.table.

Во-первых, мы преобразуем Date для правильного класса, чтобы мы могли сортировать по ней, то мы проверяем уникальные комбинации за телефон и посмотреть, если они соответствие "EGGS, CHEESE", а затем распечатать всю группу

library(data.table) 
setDT(DT)[, Date := as.IDate(Date, "%d/%m/%y")] 
DT[order(Date), if(toString(unique(Eggs.or.Cheese)) == "EGGS, CHEESE") .SD, by = Phone.Number] 
# Phone.Number  Date Eggs.or.Cheese 
# 1: 1111111111 2015-09-14   EGGS 
# 2: 1111111111 2015-09-16   CHEESE 

dplyr эквивалент будет

library(dplyr) 
DT %>% 
    mutate(Date = as.Date(Date, "%d/%m/%y")) %>% 
    arrange(Date) %>% ## This is optional if your data is already sorted 
    group_by(Phone.Number) %>% 
    filter(toString(unique(Eggs.or.Cheese)) == "EGGS, CHEESE") 

# Source: local data frame [2 x 3] 
# Groups: Phone.Number [1] 
# 
#   Date Phone.Number Eggs.or.Cheese 
#  (date)  (dbl)   (fctr) 
# 1 2015-09-14 1111111111   EGGS 
# 2 2015-09-16 1111111111   CHEESE 
+2

Работает как сон, спасибо за вашу помощь Дэвиду. Есть ли кнопка, которую я могу нажать, чтобы купить вам пиво? – Lyriss

Смежные вопросы