r - 使用索引对 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 函数来执行此操作,但无法弄清楚它的索引部分以获取与条件相对应的值。我找不到在数据帧上使用索引来执行这些数学运算的资源,并且希望得到帮助,因为我还有其他将要使用的转换。
解决方案
与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))
推荐阅读
- c - 数组指针程序翻转位和加一
- scala - Akka 广播请求不会发送到所有路由
- react-native - 为什么在使用 redux 时操作中的参数返回为未定义?
- rstudio - 在 YAML 标头中为投影仪演示设置主题选项?
- html - 将 CSS 形状的悬停区域限制为 :after
- postgresql - 用于工作 docker-compose (postgres) 的等效 docker run 命令
- azure - Service Fabric 负载平衡超时
- python-3.x - 如何停止整个测试执行但在 RobotFramework 中具有 PASS 状态?
- xml - 如何在 XML 中的 LinearLayout 中定位 TextView?
- swift - 如何在 MTKView 中使用多重采样?