2015-08-10 2 views
1

У меня есть набор данных следующим образом:Есть функция в совокупности, которые могут рассчитывать ненулевые элементы столбца

  Date  Hour ID 
     2014-01-01 0  0 
     2014-01-01 1  0 
     2014-01-01 10  0 
     2014-01-01 11  0 

У меня есть последовательность дат (все дни в 2014 году) и 24 часов после день. Если идентификатор равен нулю, это означает, что никакой вызов не был получен в соответствующие дату и время. Я хочу объединить результаты для каждой даты в течение 24 часов и вернуть новый фрейм данных, который включает дату и общее количество вызываемых клиентов. Я просто нужно сделать агрегат над ID и я написал следующую строку кода для этого:

SampleData <- aggregate(ID ~ Date, SampleData, length) 

Однако результат не то, что я хочу. Мне нужно подсчитать ненулевые идентификаторы для совокупности, но я не знаю, как это сделать.

ответ

4

Вы можете передать aggregate функцию, которая подсчитывает количество строк в каждый день с ненулевым ID:

aggregate(ID~Date, data, function(x) sum(x != 0)) 
#   Date ID 
# 1 2014-01-01 2 
# 2 2014-01-02 0 

данных (обновляется, так что имеет два ненулевых идентификаторы и два дня):

(data = read.table(text="Date  Hour ID 
      2014-01-01 0  0 
      2014-01-01 1  1 
      2014-01-01 10  2 
      2014-01-02 11  0", header=T)) 
#   Date Hour ID 
# 1 2014-01-01 0 0 
# 2 2014-01-01 1 1 
# 3 2014-01-01 10 2 
# 4 2014-01-02 11 0 
+0

Трудно сделать вывод о намерениях или данные ор, но «общее число клиентов, называемых» может также означать 'длины (уникальные (х [х! = 0]))' – Frank

+1

@Frank да, безусловно, может означать, что, как Что ж. Это не помогло, чтобы в приведенном примере были только наблюдения без посещения! – josliber

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