r - 按年份简化数据框并计算变化百分比

标签 r data.table dplyr simplify

我有两个问题: 您建议阅读哪些资源来提高数据操作能力?我一直在处理更大的数据集,并且一直在努力适应——我感觉自己碰壁了,不知道该去哪里寻找(许多在线资源在没有打好基础的情况下变得过于复杂)。

例如,我正在尝试解决这个问题。我有一个包含数百万行的 df,我正在尝试简化它并分析趋势。我有一个 dput 示例。我试图隔离每个 ID 并获取给定年份的最小值。 (有些 ID 的年份对其他人不可用)。简化该数据后,我尝试添加百分比变化列。鉴于这是一个 20 多年的时间序列,我可以在此时忽略月份,因为一年的最小值与另一年的最小值相比应该会产生合理的百分比变化。

谢谢!

输入:

structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), .Label = c("a", "b"), class = "factor"), Date = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 10L, 12L, 14L, 7L, 8L, 9L, 11L, 13L, 5L, 
6L, 10L, 12L, 14L, 7L, 8L, 9L, 11L, 13L, 15L, 16L), .Label = c("2/21/2009", 
"2/22/2009", "2/23/2009", "2/24/2009", "2/25/2009", "2/26/2009", 
"3/2/2011", "3/3/2011", "3/4/2011", "3/5/2010", "3/5/2011", "3/6/2010", 
"3/6/2011", "3/7/2010", "3/7/2011", "3/8/2011"), class = "factor"), 
    Year = c(2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2010L, 
    2010L, 2010L, 2011L, 2011L, 2011L, 2011L, 2011L, 2009L, 2009L, 
    2010L, 2010L, 2010L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
    2011L), Value = c(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
    20, 21, 22, 5, 6, 7, 8, 8, 9, 10, 11, 12, 15, 23, 25, 27)), .Names = c("ID", 
"Date", "Year", "Value"), class = "data.frame", row.names = c(NA, 
-26L))

预期输出:

structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("a", 
"b"), class = "factor"), Date = structure(c(1L, 4L, 5L, 2L, 4L, 
3L), .Label = c("2/21/2009", "2/25/2009", "3/2/2011", "3/5/2010", 
"3/6/2011"), class = "factor"), Year = c(2009L, 2010L, 2011L, 
2009L, 2010L, 2011L), Value = c(10, 16, 5, 6, 8, 10), Percent.Increase = c(NA, 
0.6, -0.6875, NA, 0.333333333, 0.25)), .Names = c("ID", "Date", 
"Year", "Value", "Percent.Increase"), class = "data.frame", row.names = c(NA, 
-6L))

最佳答案

按“ID”、“年份”分组后,我们切片每个组中的min“值”行,然后按“ID”分组,我们创建“Percent.Increase”,方法是从“Value”的lag 中减去“Value”,然后除以“Value”的lag

res <-  df1 %>%
         group_by(ID, Year) %>%
         slice(which.min(Value)) %>% 
         group_by(ID) %>%
         mutate(Percent.Increase = (Value-lag(Value))/lag(Value))

关于r - 按年份简化数据框并计算变化百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38285120/

相关文章:

r - 如何合并列表中包含的不同大小的数据帧的元素[R]?

variables - R中 "variable (number of points included)"移动平均值的高效计算

r - 如何通过r中的阈值对匹配组进行计数

r - 如何在R中计算前几年的运行总计?

r - 使用data.table时如何避免奇怪的变音错误

r - 如何使用 tidyr::replace_na 替换数据帧中的所有 NA?

r - 除非我使用奇怪的语法,否则为什么平均值会忽略修剪参数?

java - R.loess 和 org.apache.commons.math LoessInterpolator 的区别

r - 无法通过filter()将predict()输出传送到ggplot()

Windows批处理R Sweave错误加载包