首页 > 解决方案 > 按特定类别在 R 中的年复一年

问题描述

数据框有三列:

year = c(2000,2000,2001,2001,2001,2002,2002,2002)   
sales = c(100,104,106,108,112,115,121, 143) 
category = c("Auto", "Personal", "Joint", "Auto", "Personal", "Joint", "Auto", "Personal")  
df = data.frame(year, sales, category)

我使用下面的代码按类别查找同比增长,但输出添加了一个新列,该列没有正确的增长或下降百分比值。也许这是因为我的代码没有考虑不同的类别。关于如何在 R 中做到这一点的任何想法?在 SQL 中,您可以分组,但我尝试在 R 中的上述代码中添加它,这给了我一个新列,所有行都为 0?!

setDT(df)[, new.col := Sales/shift(Sales) - 1]

标签: r

解决方案


看来您使用data.table的是 ,我不太熟悉,但这是使用库的方法tidyverse。有关这两个库的优缺点的一些讨论,请参见此处。你忘了在你的例子中添加年份向量,所以我做了一个。

library(tidyverse)

sales = c(100,104,106,108,112,115,121, 143) 
category = c("Auto", "Personal", "Joint", "Auto", "Personal", "Joint", "Auto", "Personal")  
year <- c('2018','2018','2018','2019','2019','2019','2020','2020')
df = data.frame(year, sales, category)

new_df <- df %>%
  group_by(category) %>%
  mutate(growth_percentage = sales/lag(sales,n = 1, order_by = year))


推荐阅读