r - 从分组数据框的第一行创建相对值

标签 r dplyr

我有

df<-data.frame(year=c(2010, 2010, 2010, 2011, 2011), day=c(1,2,3,1,2), value=c(5,6,7,8,5))

year day value
1 2010   1     5
2 2010   2     6
3 2010   3     7
4 2011   1     8
5 2011   2     5

我想创建一个变量,其中包含每年内值的相对变化(相对于一年的第一天)并最终得到

  year day value rel.value
1 2010   1     5     1.000
2 2010   2     6     1.200
3 2010   3     7     1.400
4 2011   1     8     1.000
5 2011   2     5     0.625

是否可以在 dplyr 框架内执行此操作,而无需查找第二个表?

我使用切片来获取包含每年第一天的值的表格,但我不知道如何除以同一年的所有后续值。

最佳答案

按“年份”分组后,将除以“值”的第一个元素以创建列

library(dplyr)
df <- df %>% 
  group_by(year) %>%
  mutate(rel.value = value/first(value)) %>% 
  ungroup

-输出

df
# A tibble: 5 × 4
   year   day value rel.value
  <dbl> <dbl> <dbl>     <dbl>
1  2010     1     5     1    
2  2010     2     6     1.2  
3  2010     3     7     1.4  
4  2011     1     8     1    
5  2011     2     5     0.625

关于r - 从分组数据框的第一行创建相对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74538223/

相关文章:

r - 如何从 ROCR 包中导出数据

识别 R 中的日期时间格式

r - 使用 dplyr 中的条件合并两列

r - 在 R 中创建 EPS 或 TIFF 中的 CMYK 图

r - 更新 Ubuntu 后如何重新建立 R 项目的默认库?

删除以组第一位置的单个单元格中的值为条件的行序列

r - 总结使用 dplyr 给出错误的结果

sql-server - 从 SparklyR 将表加载到 SQL Server

r - 不均匀类别上的小平面条形图

r - 按两个向量提供的范围过滤,无需连接操作