如果有条件,如何从数据框中删除行?

时间:2018-10-16 08:55:55

标签: r

我正在尝试使用WHILE来实现这一目标,但这对我来说太复杂了,一定有一种使用dplyr库的方法。

我有一个仓库,里面有:

  product_id amount
1       1001      1
2       4911    100
3       4014     32

我正在编写一个函数,该函数将传递product_id和数量,并取出所需的数量,如果不存在product_id或数量大于可用数量的产品,则会返回错误。

因此,如果我运行该函数:

remove_warehouse(1001,1)

结果应为:

  product_id amount
1       4911    100
2       4014     32

如果我跑得快,

remove_warehouse(240,1)

remove_warehouse(4014,60)

我应该得到一个通用错误,“数量不足或产品不存在”

1 个答案:

答案 0 :(得分:3)

编写函数的一种方法可能是

remove_warehouse <- function(df, product_id, amount) {
   id = df$product_id == product_id
   if (any(id))
     amount_base = df$amount[id]
   else
     stop("No id present")
   if (amount > amount_base) 
     stop("No sufficient amount")
   else
     df$amount[id] = df$amount[id] - amount
   df
}

remove_warehouse(df, 4911, 90)

#  product_id amount
#1       1001      1
#2       4911     10
#3       4014     32

remove_warehouse(df, 1234, 12)
#Error in remove_warehouse(df, 1234, 12) : No id present

remove_warehouse(df, 1001, 100)
#Error in remove_warehouse(df, 1001, 100) : No sufficient amount

这是假设您的product_id中只有一个df

数据

df <- structure(list(product_id = c(1001L, 4911L, 4014L), amount = c(1L, 
100L, 32L)), .Names = c("product_id", "amount"), class = "data.frame",
row.names = c("1", "2", "3"))