簡體   English   中英

R 無法在我的數據中找到分位數?

[英]R Can't Find Quantile Value Within My Data?

我有幾個速度數據向量的數據框,我用 rollmean() 對其進行了平滑處理。 根據我的滾動平均值,我想用 quantile() 計算 0.75 和 1 分位數,然后找到這些特定值的第一個實例的行位置。 這是我為此編寫的代碼:

df_quantilesummary <- df %>%
  group_by(TrialID) %>%
  summarize(MaxVel = max(RollingMean, na.rm=TRUE), Qant75Vel = quantile(RollingMean, probs=c(0.75), na.rm=TRUE),
            TotalLength = length(RollingMean),RowNumMax = which(grepl(max(RollingMean, na.rm=TRUE), RollingMean)),
            RowNum75 = which(grepl(quantile(RollingMean, probs=c(0.75), na.rm=TRUE), RollingMean))[1])

沒有錯誤被拋出,一切似乎都運行良好,但是在我的數據框中,分位數將完美計算第 75 個分位數,但我發現 which(grepl(...)) 有時會返回 NA? 好像它計算的第 75 個分位數不存在。 不會針對每一次試驗,只是針對其中一些試驗。 並且 which(grepl(...)) 對於最大值可以正常工作(無論我使用 max() 還是使用 quantile(x, probs=1),兩種方式都可以)。

我在下面制作了一個模擬數據框,但代碼正在為它工作,所以我不知道發生了什么。 任何見解都會有所幫助。 謝謝你。

set.seed(82828)
dummyvelocity1 <- c(runif(200, min=-0.0523, max=1))
set.seed(3983289389)
dummyvelocity2 <- c(runif(200, min=-0.1, max=1.2))
set.seed(227272)
dummyvelocity3 <- c(runif(200, min=-0.08, max=0.9))
set.seed(27272728393)
dummyvelocity4 <- c(runif(200, min=-0.02, max=1.45))
set.seed(1488)
dummyvelocity5 <- c(runif(200, min=-0.07, max=1.03))
Velocity <- c(dummyvelocity1, dummyvelocity2, dummyvelocity3, dummyvelocity4, dummyvelocity5)
TrialID <- c(rep(1, 200), rep(2, 200), rep(3, 200), rep(4,200), rep(5, 200)) 
df <- data.frame(TrialID, Velocity)
dflist <- split(df$Velocity, df$TrialID)
RollingMeanList <- lapply(dflist, function(x) rollmean(x, 20, fill=NA))
RollingMean <- unlist(RollingMeanList)
df <- cbind(df, RollingMean)

這可能是一個精度問題。您可以嘗試使用near()

df_quantilesummary <- df %>%
  group_by(TrialID) %>%
  summarize(
    MaxVel = max(RollingMean, na.rm=TRUE),
    Qant75Vel = quantile(RollingMean, probs=c(0.75), na.rm=TRUE),
    TotalLength = length(RollingMean),
    RowNumMax = which(near(RollingMean, max(RollingMean, na.rm=T))),
    RowNum75 = which(near(RollingMean, quantile(RollingMean, probs=0.75, na.rm=T)))
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM