Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr的最小/最大坡度_R_Dplyr - Fatal编程技术网

使用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)])) )