![](/img/trans.png)
[英]Create a sequence of values by group between a min and max interval using 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”的max
和min
索引,然后使用該索引來計算“斜率”。 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.