首页 > 解决方案 > 如果满足特定条件,则删除数据框中的行,同时更新关联的总值

问题描述

我有一个包含以下信息的数据框:

个人 物品 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

感谢您提供的任何帮助。

标签: r

解决方案


这是一个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

推荐阅读