У меня есть dataframe, который выглядит примерно так:R dplyr сцепления группы, в функцию
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
Вы можете генерировать что-то подобное с помощью этого:
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)
И функция для вычисления среднего времени между пиками в отфильтрованном сигнале (среднее среднее время и дисперсия разностей во времени):
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 шляпа я пытаюсь сделать применить эту функцию для каждой комбинации id
, trialNum
и trialType
использованием groupby
:
tempTrial <-
group_by(testDF, id, trialNum, trialType) %>%
summarise(meanTime = calcStepTime(.)[1],
varianceTime= calcStepTime(.)[2])
Проблема заключается в том, что в выходном dataframe (tempTrial
) каждый ряд meanTime
и varianceTime
идентичен
в этом игрушечном наборе данных, иногда столбцы все показывают NA
(это не случается в моем фактическом наборе данных)
Я делаю что-то неправильно, чтобы вызвать каждую строку, чтобы быть я зубной для 2 столбцов? Следует принимать каждую комбинацию id
, trialNum
и trialType
и рассчитывать время пиков для каждого из них отдельно. Однако кажется, что он сохраняет только одно значение для каждой комбинации?
Я получаю сообщение об ошибке. 'Ошибка: не удалось найти функцию« масло ». Пожалуйста, укажите имена библиотек. – user2100721
добавлено - см. Править – Simon
Здесь 'findPeaks (отфильтровано)' возвращающ 'числовое (0)' – user2100721