使用dplyr的最小/最大坡度
下面是一个示例数据集:使用dplyr的最小/最大坡度,r,dplyr,R,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_slope <- df_byID %>% do(fit = lm(V1 ~ V2, .)) %>% summarise(v_slope = co
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_slope <- df_byID %>%
do(fit = lm(V1 ~ V2, .)) %>%
summarise(v_slope = coef(fit)[2])
df_斜率%
do(拟合=lm(V1~V2,)%>%
总结(v_斜率=系数(拟合)[2])
我现在想要每个ID的最小/最大值的斜率。
如果V1有几次出现相同的值,我想用第一次表示最大值,最后一次表示最小值
在本例中,我们将得到:
对于ID=1:(10-30)/(4-1)=-6.66
对于ID=2:(15-30)/(3-1)=-7.5我们可以创建“V1”的
max
和min
值指数,然后使用该指数计算“斜率”。which.max
获取第一个max
值的位置(如果有ties),行数()
相当于rank(ties.method='first')
。因此,如果我们将“V1”更改为负值,则获取行编号
,然后通过which.max
获取max
值的位置,这相当于找到最后一个“min”值位置。使用这些指数计算“斜率”
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
我们可以创建“V1”的
max
和min
值指数,然后使用该指数计算“斜率”。which.max
获取第一个max
值的位置(如果有ties),行数()
相当于rank(ties.method='first')
。因此,如果我们将“V1”更改为负值,则获取行编号
,然后通过which.max
获取max
值的位置,这相当于找到最后一个“min”值位置。使用这些指数计算“斜率”
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
我们可以创建“V1”的
max
和min
值指数,然后使用该指数计算“斜率”。which.max
获取第一个max
值的位置(如果有ties),行数()
相当于rank(ties.method='first')
。因此,如果我们将“V1”更改为负值,则获取行编号
,然后通过which.max
获取max
值的位置,这相当于找到最后一个“min”值位置。使用这些指数计算“斜率”
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
我们可以创建“V1”的
max
和min
值指数,然后使用该指数计算“斜率”。which.max
获取第一个max
值的位置(如果有ties),行数()
相当于rank(ties.method='first')
。因此,如果我们将“V1”更改为负值,则获取行编号
,然后通过which.max
获取max
值的位置,这相当于找到最后一个“min”值位置。使用这些指数计算“斜率”
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
这应该符合你的要求
df %>%
group_by(ID) %>%
summarize((max(V1) - min(V1)) / (first(V2[V1 == max(V1)]) - last(V2[V1 == min(V1)])) )
这应该符合你的要求
df %>%
group_by(ID) %>%
summarize((max(V1) - min(V1)) / (first(V2[V1 == max(V1)]) - last(V2[V1 == min(V1)])) )
这应该符合你的要求
df %>%
group_by(ID) %>%
summarize((max(V1) - min(V1)) / (first(V2[V1 == max(V1)]) - last(V2[V1 == min(V1)])) )
这应该符合你的要求
df %>%
group_by(ID) %>%
summarize((max(V1) - min(V1)) / (first(V2[V1 == max(V1)]) - last(V2[V1 == min(V1)])) )