r - 使用 mutate、if_else 和 rowSums 根据条件创建新 var
问题描述
我有一个长格式的数据框。我有多个城市。每个城市都有每个月的信息和每个代码的信息(这个代码从 100 到 1,000)。我的数据框如下所示:
代码 | 城市 | 月 | 数据 |
---|---|---|---|
100 | 一种 | 10 | 0 |
100 | 乙 | 12 | 1 |
100 | 一种 | 10 | 2 |
100 | 乙 | 12 | 3 |
100 | 一种 | 10 | 4 |
100 | 乙 | 12 | 5 |
200 | 一种 | 10 | 10 |
200 | 乙 | 12 | 11 |
200 | 一种 | 10 | 12 |
200 | 乙 | 12 | 13 |
200 | 一种 | 10 | 14 |
200 | 乙 | 12 | 15 |
我正在尝试创建一个新的 var,当变量Code等于 100时,每个月将数据变量中的信息相加。因此,在第 10 个月,我的结果为 6,而在第 12 个月,我将9的结果:
代码 |
---|
6 |
9 |
6 |
9 |
6 |
9 |
6 |
9 |
6 |
9 |
6 |
9 |
为此,我正在使用dplyr:
df <- df %>%
group_by(month) %>%
mutate(newvar =case_when(Code==100 ~ as.integer(rowSums(select_(., "Data"), na.rm = TRUE))))
但是,我遇到了一个错误,我无法正确创建这个新变量。我知道更简单的方法是使用 base R。但我想使用dplyr。
任何帮助都非常感谢!
解决方案
您只能sum
在Data
whereCode = 100
为 each设置值month
。
library(dplyr)
df %>%
group_by(month) %>%
mutate(newvar = sum(Data[Code == 100], na.rm = TRUE)) %>%
ungroup
推荐阅读
- python - 使用 Python 将数据 Excel 导出到谷歌表格
- kubernetes - 是否可以为 Kubernetes Jobs 提供一个工作池以避免创建 Pod 时间?
- laravel - laravel如何在存储firebase中上传图像
- reactjs - 如何在我的子组件中配置路由?反应路由器dom
- python - Python - 似乎无法找到如何通过其路径获取文件
- scala - 设置 UDF 返回的 DecimalType 的精度
- lua - GtkSourceView等Gtk类型如何注册到lgi lua
- scala - Spark GraphX:如何从边列表中加载折线图?
- blazor - 在同一方法调用中使其可见时如何聚焦元素?
- firebase - Flutter - 如何在 Firebase Firestore 上以正确格式存储长值?