我有两个问题:
您建议阅读哪些资源以提高数据处理能力?我一直在处理较大的数据集,并且一直在努力适应-我感觉好像撞到了墙,不知道在哪里看(许多在线资源如果没有基础就太复杂了)。
例如,我正在尝试解决此问题。我有一个包含数百万行的df,我正在尝试简化它并分析趋势。我有一个例子。我试图隔离每个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”,“年”分组后,我们对每个组中的slice
“值”行进行min
,然后按“ID”进行分组,通过从“值”的lag
中减去“值”来创建“Percent.Increase”。然后除以“值”的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/