首页 > 解决方案 > 使用索引对 r 中的数据帧执行数学运算

问题描述

我正在努力对数据框执行基本索引以执行数学运算。我有一个包含美国所有 50 个州的数据框,其中每个月都有一个条目,因此有 600 个观察值。我希望找到 12 月份的值减去每个州的 1 月份的值之间的差异。我的数据如下所示:

> head(df)
  state year month             value
1    AL 2020    01               2.7
2    AK 2020    01                 5
3    AZ 2020    01               4.8
4    AR 2020    01               3.7
5    CA 2020    01               4.2
7    CO 2020    01               2.7

例如,AL 在 12 月的值为 4.7,1 月的值为 2.7,所以我想为该状态返回 2。

我一直在尝试使用 group_by 和 summarise 函数来执行此操作,但无法弄清楚它的索引部分以获取与条件相对应的值。我找不到在数据帧上使用索引来执行这些数学运算的资源,并且希望得到帮助,因为我还有其他将要使用的转换。

标签: r

解决方案


dplyr

library(dplyr)
df %>%
  group_by(state) %>%
  summarize(year_change = value[month == "12"] - value[month == "01"])

这假设您的数据与您描述的一样 - 每个州每个月都有一个值。如果您在给定月份的某个州缺少行或多次观察,我不希望此代码有效。

另一种方法,基于行顺序而不是月份值,可能如下所示:

library(dplyr)
df %>%
  ## make sure things are in the right order
  arrange(state, month) %>% 
  group_by(state) %>%
  summarize(year_change = last(value) - first(value))

推荐阅读