Проблема с тем, что данные ‹0 не удаляются из набора данных (несмотря на кажущийся правильным код?)

Это мой набор данных (называемый cc)

Counter Date    Hour    Counts
1296    02/05/2008  0      2
1296    02/05/2008  100    0
1296    02/05/2008  200    2
1296    02/05/2008  300    0
1296    02/05/2008  400    1
1296    02/05/2008  500    6
1296    02/05/2008  600    6
1296    02/05/2008  700    45
1296    02/05/2008  800    106
1296    02/05/2008  900    43
1296    02/05/2008  1000   33
1296    02/05/2008  1100   -4
1296    02/05/2008  1200   -4
1296    02/05/2008  1300   56
1296    02/05/2008  1400   45
1296    02/05/2008  1500   49
1296    02/05/2008  1600   88
1296    02/05/2008  1700   124
1296    02/05/2008  1800   91
1296    02/05/2008  1900   42
1296    02/05/2008  2000   33
1296    02/05/2008  2100   13
1296    02/05/2008  2200   9
1296    02/05/2008  2300   8

Недавно я задал вопрос о том, как разделить мои данные, если данные соответствуют определенным критериям между двумя часами дня (см. вопрос здесь подмножество данных за день, если данные между двумя часами дня соответствуют критериям?), который работал нормально .

Мой дополнительный вопрос таков:

Любые значения меньше 0 необходимо удалить из набора данных, так как это ошибка. Для дней, где между 600 и 2200 > 0 (поэтому, если есть 0 отсчетов в 900, это будет означать, что день не включен в подмножество, но если есть отсчеты между 600 и 2200, но 0 в 200, тогда весь день все еще считается) мой код работает нормально, но есть пара часов, казалось бы, случайных дней, когда у меня есть данные -4, включенные в вывод (в примере 1100 и 1200). Я не вижу причин, по которым эти отрицательные числа должны оставаться в наборе данных, так как остальные отрицательные числа удалены. Я также проверил свои исходные данные, и нет никакой разницы в форматирование. Любая помощь будет очень признательна, так как я не нашел ничего, что могло бы помочь при поиске в Интернете, и я считаю, что код, указанный в моем последнем вопросе, был правильным.

Вот код, который я использовал (который все работы находят, кроме случайных -4 в течение нескольких дней).

#code to make only 600 hrs to 2200 hrs over 0 #
#########################################

TDF <- subset(cc, Hour>=600 & Hour<=2200) 
# get dates where there are no hours with zero count 
dates2 <- subset(aggregate(counts~Date,TDF,prod),counts>=0)$Date  
DF3 <- subset(cc,Date %in% dates2) 

#i then make the counts daily (not shown in example)#
###########################################
daily=subset(DF3)
daily$Date <- as.Date(daily$Date, "%d/%m/%Y") 
town=aggregate(counts ~ Date, daily, sum)

Заранее спасибо за помощь, Катя.


person Katie_S    schedule 11.07.2011    source источник


Ответы (1)


Если вы выполняете агрегирование с помощью функции prod, а затем проверяете, что результат >0, вы не должны удивляться, когда -4 * -4 равно GT 0.

person IRTFM    schedule 11.07.2011
comment
Ах точно я вижу! Спасибо @DWin, я новичок в R и просто не мог понять, почему это не работает. Было бы лучше добавить короткий фрагмент кода, прежде чем я создам DF3, который исключает ‹0, или есть более аккуратный способ сделать это? Большое спасибо за Вашу помощь! - person Katie_S; 12.07.2011
comment
Вы можете легко добавить & Count ›0 к аргументу подмножества, чтобы это выглядело так: TDF ‹- subset(cc, Hour›=600 & Hour‹=2200 & Count ›0) - person IRTFM; 12.07.2011