Ich versuche, eine benutzerdefinierte Funktion innerhalb dplyr
summarise
zu verwenden. Der Datensatz an dem ich arbeite downloaded here und vorbereitet für die Verwendung mit dem folgenden Code sein kann:R benutzerdefinierte Funktion in dplyr zusammenfassen
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")))
Hier ist die 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
Für jede Stufe des Faktors ist Chamber
, möchte ich das berechnen Fläche unter der Kurve, wenn x = Time_cumulative
und y = Flux_n2O
.
Ich kann dies tun, um die folgende Funktion zu einem by
Aufruf übergeben werden:
cum_ems_func <- function(x) {last(cumtrapz(x$Time_cumulative, x$Flux_N2O))}
by(test_data, test_data$Chamber, cum_ems_func)
Allerdings würde ich es vorziehen, dpylr
zu verwenden, da es weitere Datenverarbeitung ist zu tun, was am einfachsten sein wird, die summarise
Ausgabe mit .
Wenn ich versuche, die dplyr
Ansatz zu verwenden
test_data %>%
group_by(Chamber) %>%
summarise(cumulative_emmission = last(cumtrapz(Time_cumulative, Flux_N2O)))
bekomme ich folgende Fehlermeldung:
Error: Unsupported vector type language
ich auch versucht haben, mit der benutzerdefinierten Funktion cums_ems_func
im summarise Anruf mit dem resultierenden Fehler:
test_data %>%
group_by(Chamber) %>%
summarise(cumulative_emmission = cum_ems_func())
Error: argument "x" is missing, with no default
Kann mir jemand zeigen die richtige Richtung damit bitte?
Bitte fügen Sie 'dput (Kopf (test_data))' zu Ihrer Frage –
Der letzte Ansatz muss die Funktion einige Daten zu übergeben, aber so, wie Sie es definiert haben, wird es die gesamte Gruppe von data.frame benötigen, die durch '.' repräsentiert wird. Sie könnten die Funktion neu definieren, um zwei Variablen zu verwenden, wenn Sie möchten, so dass Sie einfach Spaltennamen übergeben können. Die vorherige Version ist häufiger und sollte so weit funktionieren, wie ich sagen kann. Was ist die 'cumtrapz' Funktion, und was sind ihre Parameter? – alistaire
@alistaire 'cumtrapz' ist eine Funktion zur Berechnung der Fläche unter einer Kurve durch trapezförmige Integration. Es ist Teil des "Pracma" -Pakets. Ich habe versucht, '.' zu verwenden, aber es gab mir den gleichen Wert für jede Stufe des 'Kammer'-Faktors. Ich werde versuchen, die Funktion zu ändern. –