r - 如果满足特定条件,则删除数据框中的行,同时更新关联的总值
问题描述
我有一个包含以下信息的数据框:
个人 | 物品 | X | 是 | 全部的 |
---|---|---|---|---|
1 | 一个 | 10 | 10 | 50 |
1 | 一个 | 5 | 10 | 50 |
1 | 乙 | 10 | 10 | 50 |
2 | 一个 | 10 | 25 | 100 |
2 | C | 30 | 25 | 100 |
2 | C | 25 | 25 | 100 |
3 | 乙 | 10 | 10 | 25 |
4 | C | 10 | 25 | 50 |
4 | F | 5 | 25 | 50 |
X = 物品的重量(以克为单位)。
Y = 空罐子的重量(以克为单位)。
总计 = 罐子中所有物品的总和 (X) + 空罐子的重量 (Y)。请注意,由于处理过程中的材料损失,在我的真实数据集中,总数并不总是等于这个值。
我需要做的是删除带有不需要的项目的行(比如说项目 B、E 和 F)。但是,当这些行被删除时,我希望从与个人相关联的剩余行的总计列中减去删除行中的 X 值。是的,有可能像个人 3 一样从数据集中完全删除个人。因此,数据如下所示:
个人 | 物品 | X | 是 | 全部的 |
---|---|---|---|---|
1 | 一个 | 10 | 10 | 40 |
1 | 一个 | 5 | 10 | 40 |
2 | 一个 | 10 | 25 | 100 |
2 | C | 30 | 25 | 100 |
2 | C | 25 | 25 | 100 |
4 | C | 10 | 25 | 45 |
感谢您提供的任何帮助。
解决方案
这是一个tidyverse
替代方案。将不需要的项目的 id 放入向量中。然后,按 分组后Individual
,计算材料损失是多少。然后删除不需要的项目。最后,重新计算总数。
library(dplyr)
Unwanted <- c("B", "E", "F")
df %>%
group_by(Individual) %>%
mutate(Extra = Total - Y - sum(X)) %>%
filter(!Item %in% Unwanted) %>%
mutate(Total = sum(X) + Y + Extra)
输出
Individual Item X Y Total Extra
<int> <chr> <int> <int> <int> <int>
1 1 A 10 10 40 15
2 1 A 5 10 40 15
3 2 A 10 25 100 10
4 2 C 30 25 100 10
5 2 C 25 25 100 10
6 4 C 10 25 45 10
推荐阅读
- mongodb - MongoDB - 有没有更好的方法来存储 ObjectID 列表?
- reactjs - React/TypeScript:上下文 API 状态下的联合类型
- scala - 来自 Array 列的所有组合的 Spark Dataframe
- r - R For循环替换预先分配的值
- html - 为什么`fxLayoutAlign` 表现不同?
- python - 当每行是一个列表时,将行与其后面的行连接起来
- lerna - 将 Lerna Exec 限定到特定文件夹
- powershell - 我可以通过管道将 Powershell 输出传输到加速器吗?
- git - 创建新的 Git 分支,跳过中间的提交
- python - 在循环中提取复选框值时遇到问题