dplyr:将组中的所有值除以组';s第一值

dplyr:将组中的所有值除以组';s第一值,r,dplyr,R,Dplyr,我的df看起来像这样: ID Obs Value 1 1 26 1 2 13 1 3 52 2 1 1,5 2 2 30 使用dplyr,我可以添加额外的列Col,这是将列value中的所有值除以该列中组的第一个值的结果 ID Obs Value Col 1 1 26 1 1 2 13 0,5 1 3

我的df看起来像这样:

ID    Obs    Value
1     1      26
1     2      13
1     3      52
2     1      1,5
2     2      30
使用dplyr,我可以添加额外的列Col,这是将列value中的所有值除以该列中组的第一个值的结果

ID    Obs    Value    Col
1     1      26       1
1     2      13       0,5
1     3      52       2
2     1      1,5      1
2     2      30       20

我该怎么做

按“ID”分组后,使用
mutate
将“Value”除以“Value”的
第一个
,创建一个新列

library(dplyr)
df1 %>%
   group_by(ID) %>%
   mutate(Col = Value/first(Value))
如果
第一个
的“值”为0,我们不想使用它,则使用逻辑表达式将“值”子集,然后取该值的
第一个

df1 %>%
   group_by(ID) %>%
    mutate(Col = Value/first(Value[Value != 0]))

或在
base R

df1$Col <- with(df1, Value/ave(Value, ID, FUN = head, 1))

df1$Col或在不创建附加列的情况下:

库(tidyverse)
df=数据帧(ID=c(1,1,1,2,2),Obs=c(1,2,3,1,2),Value=c(26,13,52,1.5,30))
df%>%
分组依据(ID)%>%
在('值',~./第一个(.)处变异
#>#tibble:5 x 3
#>#组:ID[2]
#>ID Obs值
#>     
#> 1     1     1   1  
#> 2     1     2   0.5
#> 3     1     3   2  
#> 4     2     1   1  
#> 5     2     2  20
###或###
df%>%
分组依据(ID)%>%
在('值',函数(x)x/第一个(x))处进行变异
#>#tibble:5 x 3
#>#组:ID[2]
#>ID Obs值
#>     
#> 1     1     1   1  
#> 2     1     2   0.5
#> 3     1     3   2  
#> 4     2     1   1  
#> 5     2     2  20

由(v0.3.0)

相关人员于2020-01-04创建,dplyr中是否有方法动态定义该值?有些组的第一个值为0,我希望通过除以第一个值来避免INFs!=0。@TImHaus。在这种情况下,将
mutate
更改为
mutate(Col=Value/first(Value[Value!=0])