簡體   English   中英

使用dplyr的最小/最大斜率

[英]min/max slope using dplyr

這是一個示例數據集:

library(dplyr)
df <- data.frame(ID=c(1,1,1,1,2,2,2,2),
             V1=c(30,20,10,10,30,30,15,20),
             V2=c(1:4,1:4))

我按ID分組

df_byID <- df %>% group_by(ID)

我可以這樣計算每個人的坡度:

df_slope <- df_byID %>%
  do(fit = lm(V1 ~ V2, .)) %>%
  summarise(v_slope = coef(fit)[2])

我現在想要每個ID的最小值/最大值的斜率。 如果V1多次出現相同的值,我想將第一個用於最大,將最后一個用於最小。

在此示例中,我們將獲得:

對於ID = 1:(10-30)/(4-1)= -6.66

對於ID = 2:(15-30)/(3-1)= -7.5

這應該按照您的要求進行

df %>% 
group_by(ID) %>% 
summarize((max(V1) - min(V1)) / (first(V2[V1 == max(V1)]) - last(V2[V1 == min(V1)])) )

我們可以創建“ V1”的maxmin索引,然后使用該索引來計算“斜率”。 which.max獲取第一個max的位置(如果有聯系), row_number()等同於rank(ties.method='first') 因此,如果我們將“ V1”更改為負數,則獲取row_number ,然后通過which.max獲取max的位置,這等同於找到最后一個“最小值”的位置。 使用這些索引來計算“坡度”。

df_byID  %>% 
      mutate(Max = which.max(V1), Min= which.max(row_number(-V1))) %>% 
      summarise(slope= (V1[Min[1L]]-V1[Max[1L]])/(V2[Min[1L]]-V2[Max[1L]]))
#      ID     slope
#  (dbl)     (dbl)
#1     1 -6.666667
#2     2 -7.500000

暫無
暫無

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

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