Я пытаюсь использовать пользовательскую функцию в пределах dplyr
summarise
. Набор данных я работаю может быть downloaded here и нацелен на использование, используя следующий код:R пользовательская функция в dplyr summary
raw_data <- read.csv("Output/FluxN2O.csv", stringsAsFactors = FALSE)
test_data <- raw_data %>% mutate(Chamber = as.factor(Chamber), Treatment = as.factor(Treatment. Time = as.POSIXct(Time, format = "%Y-%m-%d %H:%M:%S")))
Вот head()
> head(test_data)
Time Chamber_closed Slope R_Squared Chamber Treatment Flux_N2O Time_relative Time_cumulative
1 2016-05-03 00:08:21 10.23 8.873843e-07 0.6941540 10 AN 0.7567335 0.0 0.0
2 2016-05-03 06:10:21 12.24 -5.540907e-06 0.7728001 12 U -4.7251117 362.0 362.0
3 2016-05-03 06:42:21 10.24 -5.260463e-06 0.9583473 10 AN -4.4859581 32.0 394.0
4 2016-05-03 07:12:21 9.23 -5.320429e-06 0.7602987 9 IU -4.5370951 30.0 424.0
5 2016-05-03 07:42:21 7.23 3.135043e-06 0.7012436 7 U 2.6734669 30.0 454.0
6 2016-05-03 20:10:15 5.24 5.215290e-06 0.7508935 5 AN 4.4474364 747.9 1201.9
Для каждого уровня фактора Chamber
, я хочу, чтобы вычислить площадь под кривой при х = Time_cumulative
и y = Flux_n2O
.
Я могу это сделать с помощью следующей функции передается в by
вызова:
cum_ems_func <- function(x) {last(cumtrapz(x$Time_cumulative, x$Flux_N2O))}
by(test_data, test_data$Chamber, cum_ems_func)
Однако я предпочел бы использовать dpylr
как есть обработка дополнительных данных, чтобы сделать, который будет легче всего с помощью summarise
выхода ,
Когда я пытаюсь использовать dplyr
подход
test_data %>%
group_by(Chamber) %>%
summarise(cumulative_emmission = last(cumtrapz(Time_cumulative, Flux_N2O)))
Я получаю следующее сообщение об ошибке:
Error: Unsupported vector type language
Я также попытался с помощью определяемой пользователем функции cums_ems_func
в вызове подвести итог с полученным ошибка:
test_data %>%
group_by(Chamber) %>%
summarise(cumulative_emmission = cum_ems_func())
Error: argument "x" is missing, with no default
Может ли кто-нибудь указать мне Правильное направление с этим пожалуйста?
Пожалуйста, добавьте 'dput (голова (test_data))' на ваш вопрос –
Последний подход должен вам передать функцию некоторые данные, но так, как вы его определили, ему понадобится целая группа data.frame, которая представлена '.'. Вы можете переопределить функцию, чтобы взять две переменные, если хотите, чтобы вы могли просто передать имена столбцов. Предыдущая версия более распространена и должна работать, насколько я могу судить. Что такое функция 'cumtrapz' и каковы ее параметры? – alistaire
@alistaire 'cumtrapz' - это функция для вычисления площади под кривой путем трапецеидальной интеграции. Это часть пакета «pracma». Я попытался использовать '.', но он дал мне то же значение для каждого уровня фактора« Камера ». У меня будет возможность изменить функцию. –