У меня есть данные, которые упорядочены таким образом, что день/месяц/год в отдельных столбцах (что полезно для того, как мне нужно подмножество данных). Каждый столбец, кроме D/M/Y, является столбцами значений. По моим реальным данным, это уезды в СШАPlyr/data.table подмножество
Мне нужно суммировать разные диапазоны дат, которые варьируются в зависимости от разных комбинаций день, месяц и год. Учитывая, что каждый столбец является графством, функции ddply/data.table/apply кажутся наиболее подходящими для решения проблемы. Однако я не могу понять, как подмножить мои данные.
Вот тривиальный пример:
set.seed(1234)
data <- data.frame(day=rep(seq(1,5),9), month= rep(c(rep(1,5),rep(2,5),rep(11,5)),3),
year=c(rep(1999,15),rep(2000,15),rep(2001,15)), Abel = round(runif(n=45, 0, 5),2) ,
Bertha=round(runif(n=45, 0, 5),2), Charlie= round(runif(n=45,0, 5),2))
dt <- data.table(data)
keycols <- c("day", "month", "year")
setkeyv(dt, keycols) #not sure if this is necessary
Первоначально я думал, используя ddply команду() с опцией подвести итог, но видели и другие случаи, когда люди рекомендовали использовать data.table рамки. Тем не менее, я не могу понять способ подмножества данных таким образом, чтобы получить его, чтобы соответствовать результаты следующим образом:
sum(data$Abel[which(data$year==1999 & data$month==2 & data$day >=1 & data$day <4)]) #4.41
sum(data$Bertha[which(data$year==1999 & data$month==2 & data$day >=1 & data$day <4)]) #5.51
sum(data$Charlie[which(data$year==1999 & data$month==2 & data$day >=1 & data$day <4)]) #4.19
Хотя этот пример может показаться легким, я должен вычислить 10-дневные средние климата данные для сотен графств в течение десятилетий, поэтому получение рамок ddply/data.table для работы действительно поможет!
Я попытался как data.table и ddply, но и с ошибками:
dt[i=list(year==1999, month==2, day >=1, day<3), sum]
#Error in `[.data.table`(dt, i = list(year == 1999, month == 2, day >= :
# typeof x.day (integer) != typeof i.day (logical)
Я понимаю, что это значит, что я делаю что-то неправильно с настройкой data.table, но я гавань» t использовал его раньше и просмотрел несколько файлов справки и не может понять проблемы подмножества.
Для ddply, я получаю другую ошибку, когда я просто пытаюсь использовать одну особую колонку, чтобы попытаться заставить его работать:
ddply(data, .(year, month, day, Abel), summarize, sum.val = sum)
#Error in vector(type, length) :
# vector: cannot make a vector of mode 'builtin'.
Любое руководство по решению проблем подобного рода было бы весьма признателен!
Что именно вы хотите суммировать по переменным группировки? –
Результаты от 'sum' expessions неправильные не? –
@PauloCardoso: каждый столбец представляет данные о осадках для этого округа, поэтому я хотел бы суммировать это для разных диапазонов дня/месяца/года, которые будут меняться. Имеет ли это смысл? Или мне нужно уточнить? – Tony