2016-01-03 2 views
2

Я бы хотел применить аналитические веса к некоторым данным временных рядов, но не уверен, как это сделать в R. Я переписываю код Stata, а код использует collapse и [aweight='weightVar'].Применение аналитических весов к данным временных рядов

Stata Код

collapse temp [aweight='weightVar], by(year); 

Как я могу использовать аналитические данные веса для использования croparea ниже в качестве переменной весовой для temp для каждого идентификатора каждого года?

Выборочные данные

df <- structure(list(id = c(1, 1, 1, 1, 2, 2, 2, 2), year = c(1900, 
1900, 1900, 1900, 1901, 1901, 1901, 1901), month = c(1L, 2L, 
3L, 4L, 1L, 2L, 3L, 4L), temp = c(51.8928991815029, 52.8768994596968, 
70.0998976356871, 62.2724802472936, 51.8928991815029, 52.8768994596968, 
70.0998976356871, 62.2724802472936), croparea = c(50, 50, 50, 
50, 30, 30, 30, 30)), .Names = c("id", "year", "month", "temp", 
"croparea"), row.names = c(NA, -8L), class = "data.frame") 

    id year month  temp croparea 
1 1 1900  1 51.89290  50 
2 1 1900  2 52.87690  50 
3 1 1900  3 70.09990  50 
4 1 1900  4 62.27248  50 
5 2 1901  1 51.89290  30 
6 2 1901  2 52.87690  30 
7 2 1901  3 70.09990  30 
8 2 1901  4 62.27248  30 
+1

Начните с поваренной книгой по подведению здесь: http://www.cookbook-r.com/Manipulating_data/Summarizing_data/ – patrickmdnet

+1

Вы можете четко заявить задача? По умолчанию функция 'collapse' является' mean'; вы хотите, чтобы среднее значение temps было взвешено по урожаю, сгруппированное по годам? – patrickmdnet

+0

@patrickmdnet Да, это то, что мне нужно, но для каждого идентификатора. Я думаю, мне нужен больший набор данных. – Vedda

ответ

2

Спасибо за включая выборочные данные! Это значительно упрощает работу.

Stata collapse похоже на R functions aggregate or ddply. Похоже, вы хотите получить взвешенное (по croparea) среднее значение temp сгруппировано по id.

For weighted means in R see this SO question; Я возьму первое решение и применить его к данным:

library(plyr) 
ddply(df, .(id), function(x) data.frame(wtempmean=weighted.mean(x$temp, x$croparea))) 

    id wtempmean 
1 1 59.28554 
2 2 59.28554 
+0

Спасибо. Это выглядит хорошо. Существуют ли другие функции в r для такого веса? Я не знал о средневзвешенном значении – Vedda

+0

Возможно ли использовать 'dplyr'? Не знаете, как реализовать это – Vedda

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