Я пытаюсь построить функцию в R, в которой я могу поднастроить свой необработанный кадр данных в соответствии с некоторыми спецификациями, а затем преобразовать этот подмножественный кадр данных в таблицу пропорций.
К сожалению, некоторые из этих поднаборов даютна пустой фрейм данных, так как для некоторых конкретных спецификаций у меня нет данных;следовательно, никакая таблица пропорций не может быть рассчитана.Итак, я хотел бы взять ближайший временной шаг, из которого у меня есть непустой поднабор данных, и использовать его в качестве входных данных для пустого поднабора данных.
Вот некоторые сведения о моем фрейме данных ифункция:
Мой необработанный кадр данных выглядит +/- следующим образом:
| year | quarter | area | time_comb | no_individuals | lenCls | age |
|------|---------|------|-----------|----------------|--------|-----|
| 2005 | 1 | 24 | 2005.1.24 | 8 | 380 | 3 |
| 2005 | 2 | 24 | 2005.2.24 | 4 | 490 | 2 |
| 2005 | 1 | 24 | 2005.1.24 | 3 | 460 | 6 |
| 2005 | 1 | 21 | 2005.1.21 | 25 | 400 | 2 |
| 2005 | 2 | 24 | 2005.2.24 | 1 | 680 | 6 |
| 2005 | 2 | 21 | 2005.2.21 | 2 | 620 | 5 |
| 2005 | 3 | 21 | 2005.3.21 | NA | NA | NA |
| 2005 | 1 | 21 | 2005.1.21 | 1 | 510 | 5 |
| 2005 | 1 | 24 | 2005.1.24 | 1 | 670 | 4 |
| 2006 | 1 | 22 | 2006.1.22 | 2 | 750 | 4 |
| 2006 | 4 | 24 | 2006.4.24 | 1 | 660 | 8 |
| 2006 | 2 | 24 | 2006.2.24 | 8 | 540 | 3 |
| 2006 | 2 | 24 | 2006.2.24 | 4 | 560 | 3 |
| 2006 | 1 | 22 | 2006.1.22 | 2 | 250 | 2 |
| 2006 | 3 | 22 | 2006.3.22 | 1 | 520 | 2 |
| 2006 | 2 | 24 | 2006.2.24 | 1 | 500 | 2 |
| 2006 | 2 | 22 | 2006.2.22 | NA | NA | NA |
| 2006 | 2 | 21 | 2006.2.21 | 3 | 480 | 2 |
| 2006 | 1 | 24 | 2006.1.24 | 1 | 640 | 5 |
| 2007 | 4 | 21 | 2007.4.21 | 2 | 620 | 3 |
| 2007 | 2 | 21 | 2007.2.21 | 1 | 430 | 3 |
| 2007 | 4 | 22 | 2007.4.22 | 14 | 410 | 2 |
| 2007 | 1 | 24 | 2007.1.24 | NA | NA | NA |
| 2007 | 2 | 24 | 2007.2.24 | NA | NA | NA |
| 2007 | 3 | 24 | 2007.3.22 | NA | NA | NA |
| 2007 | 4 | 24 | 2007.4.24 | NA | NA | NA |
| 2007 | 3 | 21 | 2007.3.21 | 1 | 560 | 4 |
| 2007 | 1 | 21 | 2007.1.21 | 7 | 300 | 3 |
| 2007 | 3 | 23 | 2007.3.23 | 1 | 640 | 5 |
Здесь год , квартал и площадь относится к определенному времени (год и квартал) и области, для которой X нет.лиц были измерены ( нет_индивидов ).Например, из первого ряда мы получаем, что в первом квартале 2005 года в области 24 у меня было 8 человек, принадлежащих к классу длины ( lenCLs ) 380 мм и возрасту = 3.Стоит отметить, что для конкретной комбинации года, квартала и области у меня могут быть разные классы длины и возраст (таким образом, несколько строк)!
Так что я хочу сделать, в основном, для поднабора необработанного кадра данных дляопределенную комбинацию года, квартала и области, и из этой комбинации вычислите таблицу пропорций, основанную на количестве людей в каждом классе длины.
Пока моя основная функция выглядит следующим образом:
LAK <- function(df, Year="2005", Quarter="1", Area="22", alkplot=T){
require(FSA)
# subset alk by year, quarter and area
sALK <- subset(df, year==Year & quarter==Quarter & area==Area)
dfexp <- sALK[rep(seq(nrow(sALK)), sALK$no_individuals), 1:ncol(sALK)]
raw <- t(table(dfexp$lenCls, dfexp$age))
key <- round(prop.table(raw, margin=1), 3)
return(key)
if(alkplot==TRUE){
alkPlot(key,"area",xlab="Age")
}
}
Из приведенного выше примера набора данных можно заметить, что для year = 2005 & квартал = 3 & area = 21 , у меня нет размеренных людей.Тем не менее, для одной и той же области И года у меня есть данные для 1 или 2 квартала. Наиболее разумным предположением было бы взять подмножественный кадр данных с ближайшего временного шага (четвертый квартал с той же областью и годом).) и замените NA из столбцов « no_individuals », « lenCls » и « age » соответственно.
Обратите внимание, что в некоторых случаях у меня нет данных за определенный год!В приведенном выше примере это можно увидеть, посмотрев на область 24 из 2007 года. В этом случае я не могу заимствовать информацию из ближайшего квартала, и вместо этого мне нужно будет заимствовать информацию из предыдущего года.Это будет означать, что для год = 2007 и площадь = 24 и квартал = 1 я бы позаимствовал информацию из год = 2006 & площадь = 24 и квартал 1 и т. Д. И т. Д.далее.
Я пытался включить это в свою функцию, указав некоторые дополнительные правила, но из-за моих слабых навыков программирования я не добился никакого прогресса.
Итак, любая помощь здесь будет очень оценена.
Вот моя функция LAK, которую я пытаюсь обновить:
LAK <- function(df, Year="2005", Quarter="1", Area="22", alkplot=T){
require(FSA)
# subset alk by year, quarter and area
sALK <- subset(df, year==Year & quarter==Quarter & area==Area)
# In case of empty dataset
#if(is.data.frame(sALK) && nrow(sALK)==0){
if(sALK[rowSums(is.na(sALK)) > 0,]){
warning("Empty subset combination; data will be subsetted based on the
nearest timestep combination")
FIXME: INCLDUE IMPUTATION RULES HERE
}
dfexp <- sALK[rep(seq(nrow(sALK)), sALK$no_individuals), 1:ncol(sALK)]
raw <- t(table(dfexp$lenCls, dfexp$age))
key <- round(prop.table(raw, margin=1), 3)
return(key)
if(alkplot==TRUE){
alkPlot(key,"area",xlab="Age")
}
}