Ich habe einen Datenrahmen, die etwa wie folgt aussieht:R dplyr Gruppe verketten, indem sie in Funktion
time id trialNum trialType accX gravX
1 1 6 7 low -0.38876217 10.185266
2 2 1 6 low 0.68254705 10.741545
3 3 3 15 high -0.21906854 9.466929
4 4 2 15 none -0.03370001 9.490829
5 5 4 1 high 0.16511542 10.986796
6 6 9 2 none -0.10441621 9.915561
Sie etwas ähnliches mit diesem erzeugen kann:
testDF <- data.frame(time = 1:50,
id = sample(1:10, size=50, replace=T),
trialNum = sample(1:15, size = 50, replace=T),
trialType = sample(c("none", "low", "high"),
size = 50, replace=T),
accX = sin(seq(1,50,1)),
gravX = 0.1)
Und eine Funktion, um die durchschnittliche Zeit zu berechnen zwischen Spitzen in einem gefilterten Signal (mittlere Antwortzeit und Varianz der Zeitdifferenzen):
library(dplyr)
library(signal)
library(quantmod)
calcStepTime <- function(df){
bf <- butter(1, c(0.03,0.05), type="pass")
filtered <- filtfilt(bf, df$accX - df$gravX)
peaks <- findPeaks(filtered)
peakValue <- filtered[peaks]
peakTime <- df$time[peaks]
timeDifferences <- diff(peakTime)
meanStepTime <- mean(timeDifferences)
varianceStepTime <- var(timeDifferences)
return(c(meanStepTime, varianceStepTime))
}
W Hut Ich versuche, diese Funktion zu jeder Kombination von id
zu tun gelten, trialNum
und trialType
mit groupby
:
tempTrial <-
group_by(testDF, id, trialNum, trialType) %>%
summarise(meanTime = calcStepTime(.)[1],
varianceTime= calcStepTime(.)[2])
Das Problem ist, dass in dem Ausgangsdatenrahmen (tempTrial
) jede Reihe von meanTime
und varianceTime
identisch ist
in diesem Spielzeug-Datensatz, manchmal die alle Spalten zeigen NA
(dies nicht in meinem aktuellen Datensatz geschehen)
Mache ich etwas falsch jede Zeile zu verursachen i zu sein Zahn für die 2 Säulen? Es sollte jede Kombination von id
, trialNum
und trialType
genommen werden, und Berechnung der Spitzenzeiten für jede von denen separat. Es scheint jedoch nur einen einzigen Wert für jede Kombination zu speichern.
Ich erhalte einen Fehler. 'Fehler: konnte die Funktion" butter "nicht finden' Bitte geben Sie die Bibliotheksnamen an. – user2100721
hinzugefügt - siehe Bearbeiten – Simon
Hier, 'findPeaks (gefiltert)' zurückgeben 'numerisch (0)' – user2100721