r - 按特定类别在 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]
解决方案
看来您使用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))
推荐阅读
- python - FastAPI中音频流的Websockets桥接器
- ruby-on-rails - 在 dockerized Ruby On Rails 应用程序中安装/升级 postgresql-client 到版本 12
- image - Flutter & Shared Preference:如何将网络图像保存到本地内存?
- typescript - 相同长度的参数打字稿
- docker - Docker 构建不共享 MAC 的网络接口
- python - Python Youtube API:UnicodeEncodeError:'charmap'编解码器无法在位置 7741 编码字符'\u279c':字符映射到
- sql - 如何在插入sql表之前检查条目是否存在
- arduino - 关于将代码加载到 UNO 板的问题
- python - 从 .py 文件中添加/删除自定义 Kivy 小部件
- angular - 使用Angular按下后退按钮时如何导航到另一条路线