Здравствуйте, гость ( Вход | Регистрация )
29.08.2012 - 12:02
Сообщение
#1
|
|
|
Группа: Пользователи Сообщений: 43 Регистрация: 4.01.2012 Пользователь №: 23400 |
Добрый день.
Помогите, пожалуйста, написать алгоритм для R. У меня две базы данных, одна из них включает номер пациента, дату каждого измерения (как правило, измерение проводилось в среднем каждуjу неделю в течении 1 года ) и номер недели (1,2,3...54), вторая база включает информацию о ежедневной температуре воздуха. Задача: нужно посчитать среднюю температуру, предшествующую каждому измерению. Например, для первой недели нужно рассчитать среднюю темп за 7 дней до измерения (28apr1999-7дней), для второй недели за период 28apr1999-07may1999 и т.д. FID studydate week 1 28apr1999 1 1 07may1999 2 1 14may1999 3 1 21may1999 4 Second dataset temp date 5.37 1999-04-20 2.13 1999-04-21 1.6 1999-04-22 -0.17 1999-04-23 2.53 1999-04-24 Спасибо! |
|
|
![]() |
![]() |
![]() |
29.08.2012 - 18:43
Сообщение
#2
|
|
|
Группа: Пользователи Сообщений: 43 Регистрация: 4.01.2012 Пользователь №: 23400 |
Спасибо!
У меня вопрос, почему к(width of moving window)=3? Не совсем поняла, как работает предложенный вами метод.. Я думала, что нужно написать loop для решения этой задачи. Но мои попытки не дали желаемого результата.. airpollution <- read.table("C:.../Pay.csv",blank.lines.skip = TRUE,fill=T,header=T,sep=";") summary(airpollution) dat <- paste(airpollution[,3],"-",airpollution[,2],"-",airpollution[,1],sep="") dat <- as.Date(dat, format="%Y-%m-%d") pay <- cbind(airpollution,dat) x <- read.dta("C:/.../symptoms.dta") x$stday <- as.Date(x$stday, origin="1960-01-01",format="%Y-%m-%d") temp<- rep(NA, length(x$FID)) index <- 1:length(pay$dat) pm10<- rep(NA, length(x$FID)) for (i in 1:length(x$FID)) { start <- x$stday[i]==pay$dat s <- index[start] end <- x$stday[i]+1==pay$dat e <- index[end] pm10[i] <- mean(pay$pm10[s:e],na.rm = T) paytemp[i] <- mean(pay$temp[s:e],na.rm = T) } Не уверена насчет этой части end <- x$stday[i]+1==pay$dat +1 это значит, что следующая строка, или я ошибаюсь? |
|
|
![]() |
![]() |
29.08.2012 - 20:57
Сообщение
#3
|
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Спасибо! У меня вопрос, почему к(width of moving window)=3? Не совсем поняла, как работает предложенный вами метод.. Я думала, что нужно написать loop для решения этой задачи. Но мои попытки не дали желаемого результата.. airpollution <- read.table("C:.../Pay.csv",blank.lines.skip = TRUE,fill=T,header=T,sep=";") summary(airpollution) dat <- paste(airpollution[,3],"-",airpollution[,2],"-",airpollution[,1],sep="") dat <- as.Date(dat, format="%Y-%m-%d") pay <- cbind(airpollution,dat) x <- read.dta("C:/.../symptoms.dta") x$stday <- as.Date(x$stday, origin="1960-01-01",format="%Y-%m-%d") temp<- rep(NA, length(x$FID)) index <- 1:length(pay$dat) pm10<- rep(NA, length(x$FID)) for (i in 1:length(x$FID)) { start <- x$stday[i]==pay$dat s <- index[start] end <- x$stday[i]+1==pay$dat e <- index[end] pm10[i] <- mean(pay$pm10[s:e],na.rm = T) paytemp[i] <- mean(pay$temp[s:e],na.rm = T) } Не уверена насчет этой части end <- x$stday[i]+1==pay$dat +1 это значит, что следующая строка, или я ошибаюсь? 1) на таких коротких данных я выбрал усреднение по 3 дням (или меньше за счет выбранного алгоритма) чтобы хоть что то работало для отладки. Программа работает просто --- для всех дней справочника температуры рассчитывается среднее за предыдущие 7 дней (у меня для отладки на Ваших лапидарных примерах таблиц -- за 3 дня). После этого Вы просто запрашиваете последней строкой из справочника среднюю температуру для даты инцидента. Скажите куда Вам это среднее надо подставить? И приведите более длинные куски данных. Иначе мне непонятно чем Вас не устраивает предложенное мной решение. 2) Ну что могу сказать, как говорится --- " Хороший программист на фортране, на любом языке напишет программу на фортране" Я не использую циклов в R, и Вам не советую. В R все делается через *apply() операторы. Для использование for() нужна крайне исключительная причина. Прочитайте пожалуйста руководство "Введение в R" (или на английском, или на русском со страницы перевода http://m7876.wiki.zoho.com/Introduction-to-R.html , а то у меня какое то чувство что я его зря переводил) ![]() |
|
|
![]() |
![]() |
Olga_ Помогите, пожалуйста, написать алгоритм для R 29.08.2012 - 12:02
p2004r Цитата(Olga_ @ 29.08.2012 - 12:02) Д... 29.08.2012 - 16:37
Olga_ Цитата(p2004r @ 29.08.2012 - 19:57) ... 29.08.2012 - 21:17

p2004r Цитата(Olga_ @ 29.08.2012 - 21:17) П... 30.08.2012 - 10:44

Olga_ Цитата(p2004r @ 30.08.2012 - 09:44) ... 30.08.2012 - 12:02

p2004r Цитата(Olga_ @ 30.08.2012 - 12:02) И... 30.08.2012 - 15:37

Olga_ Цитата(p2004r @ 30.08.2012 - 14:37) ... 30.08.2012 - 16:10

p2004r Цитата(Olga_ @ 30.08.2012 - 16:10) Н... 30.08.2012 - 19:50

Olga_ Цитата(p2004r @ 30.08.2012 - 18:50) ... 30.08.2012 - 21:16
Olga_ --- 29.08.2012 - 21:17
Olga_ Что то у меня не получается..
Мой код
airpolluti... 11.09.2012 - 11:50
p2004r ну а файлы данных запаковать в rar и выложить? 12.09.2012 - 12:30
Olga_ Решили оставить вариант с уровнем полютантов за пр... 6.11.2012 - 18:08
p2004r Цитата(Olga_ @ 6.11.2012 - 18:08) Ре... 7.11.2012 - 21:49
Olga_ Спасибо, я уже сама нашла и создала искусственные ... 7.11.2012 - 22:10
p2004r Цитата(Olga_ @ 7.11.2012 - 22:10) Сп... 8.11.2012 - 21:18
Olga_ Временной ряд уже создан, это все те же данные
FID... 8.11.2012 - 22:30
p2004r Цитата(Olga_ @ 8.11.2012 - 22:30) Вр... 8.11.2012 - 23:33
Olga_ У меня time series data с нерегулярными интервалам... 9.11.2012 - 00:32
p2004r Ха, какой тонкий тролинг
не говорим попусту, а ч... 9.11.2012 - 12:57![]() ![]() |