我有一個數據幀,看起來是這樣的:[R dplyr鏈組通過到功能
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)
和一個函數來計算的平均時間:
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
您可以使用此產生類似的東西濾波信號中的峯值之間(返回平均時間和時差的方差):
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])
的問題是,在輸出數據幀(tempTrial
)的meanTime
和varianceTime
每一行與
在這個玩具的數據集,有時列都顯示NA
(這並不在我的實際數據集中發生)
我做得不正確造成的每一行是我牙列的2列?應該採取id
,trialNum
和trialType
的每個組合,並分別計算每個組合的峯值時間。但是,它似乎只存儲每個組合的單個值?
我收到一個錯誤。 '錯誤:找不到函數「黃油」'請提供庫名稱。 – user2100721
新增 - 請參閱編輯 – Simon
在這裏,'findPeaks(filtered)'返回'numeric(0)' – user2100721