#aggregate
#агрегат
Вопрос:
Я пытаюсь использовать один и тот же блок кода для анализа в течение 3 разных лет.
year = c("Year.2006", "Year.2016", "Year.2031")
for(x in year){
print(x)
print(new_Data$x)
Tot_data <- setNames(aggregate(new_Data$x, by=list(State = new_Data$State), FUN=sum), c("state","total"))
children_data <- new_Data[new_Data$Age_num <= 15,]
...}
Пытаюсь заменить экземпляры year в приведенном выше коде для использования в функции. Как мне провести годы в aggregate?
dput(head(new_Data))
structure(list(Age = c("0", "0", "0", "0", "0", "0"), State = c("NSW",
"Vic", "QLD", "SA", "WA", "Tas"), X2006 = c("6,024", "1255",
"5,324", "1007", "2,391", "679"), X2016 = c("6,597", "1,480",
"5,295", "986", "2,300", "644"), X2031 = c("8,517", "2,122",
"7,205", "1,254", "2,767", "808"), Age_num = c(0, 0, 0, 0, 0,
0), Year.2006 = c(6024, 1255, 5324, 1007, 2391, 679), Year.2016 = c(6597,
1480, 5295, 986, 2300, 644), Year.2031 = c(8517, 2122, 7205,
1254, 2767, 808)), row.names = c(NA, 6L), class = "data.frame")
Комментарии:
1. @RonakShah отметил. Отредактировано.
2. В вашем коде выше есть
combined_df$x
для вычисленияgrowth_rate
, но у вас нигде нетx
столбца в ваших данных. Откуда берется этот столбец или это должно быть что-то другое?3. Отредактировано в приведенном коде. Просто предыдущий шаг перед combined_df$x
Ответ №1:
Не тестировал это из-за отсутствия воспроизводимого примера, но вы можете запустить aggregate
функцию, передав formula
объект. Создайте объект формулы с помощью reformulate
передачи year
в качестве символьного значения и используйте [[
для извлечения значения столбца в виде вектора.
aggregated_data <- function(new_data, year) {
Tot_data <- setNames(aggregate(reformulate('State', year), new_data, sum), c("state","total"))
children_2016_data <- new_data[new_data$Age_num <= 15,]
total_sum_by_state <- aggregate(reformulate('State', year), children_2016_data, sum)
combined_df = cbind(total_sum_by_state,Tot_data)
growth_rate <- combined_df
growth_rate$percentage <- growth_rate[[year]]/growth_rate$total * 100
max_child_pop_2016_state <- as.character(growth_rate$State[which.max(growth_rate$percentage)])
max_child_pop_2016_percentage <- as.character(growth_rate$percentage[which.max(growth_rate$percentage)])
sprintf("The regions with maximum children population in the %s is %s with percentage as %s",year, max_child_pop_2016_state, max_child_pop_2016_percentage)
}
Теперь запустите это с помощью lapply
:
year = c("Year.2006", "Year.2016", "Year.2031")
lapply(year, aggregated_data, new_data = new_data)
Комментарии:
1. Мои типы данных следующие: State<chr> x<dbl> state<chr> total<dbl> Я получаю эту ошибку: Ошибка в x / total: нечисловой аргумент для двоичного оператора
2. @Новичок, ты можешь добавить
dput(head(new_data))
?3. добавлено к вопросу
4. @Новичок Проверьте обновленный ответ, работает ли он для ваших данных.