删除/移动其他数据框中具有匹配值的行

发布于 2025-02-04 01:31:14 字数 1781 浏览 4 评论 0原文

我目前正在努力在某些系统错误发生后管理产品退款。 我有一个巨大的XLXS列表(表1),所有等待的退款几周。但是,该表中的某些记录已手动退还并存储在单独的文件中(表2)。

以下是我的数据集的示例:

所有退款表:

数字订购数量状态
1123456789150.50待定
2235641458250.30待定
323598425850.20 50.20 50.20迫在眉睫
4283478566102.45悬而未决

数字订单数量状态
1 1123456789150.50退还
2235641458250.30 250.30退还

我现在希望做的是删除(最好移动到单独的表中)“所有退款表”中的行与“订单订单”匹配的“订单”的“手动退还表”的订单Number匹配。你们能帮我吗?

谢谢!

I'm currently working on managing refunding of products after some systems errors occured.
I have a huge xlxs list (table 1) with all pending refunds of a couple of weeks. However, some of the records in that table have been manually refunded and stored in a seperate file (table 2).

Here is an example of my data sets:

All refunds table:

numberordernumberAmountStatus
1123456789150.50pending
2235641458250.30pending
323598425850.20pending
4283478566102.45pending

Manually refunded table

numberordernumberAmountStatus
1123456789150.50refunded
2235641458250.30refunded

What I now wish to do is delete (preferably move to a separate table) the rows in the 'all refunds table' whenever the ordernumber matches the ordernumber in the 'manually refunded table'. Could you guys help me out?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九公里浅绿 2025-02-11 01:31:14

使用base r,您可以将匹配的OrderNumber与以下代码进行子集匹配:

all_refunds <- data.frame(
  ordernumber = c(123456789, 235641458,     235984258,  283478566),
  amount = c(150.50, 250.30, 50.20, 102.45),
  status = rep("pending", 4)
)

manual_refunds <- data.frame(
  ordernumber = c(123456789, 235641458),
  amount = c(150.50, 250.30)
)

matching <- all_refunds$ordernumber %in% manual_refunds$ordernumber #Find matching ordernumbers.

然后您可以制作一个带有匹配行的新表,然后从All_refunds表中删除行,例如:

registered_refunds <- all_refunds[matching, ] #Select only matching from all_refunds
all_refunds <- all_refunds[!matching, ] #Select rows that DO NOT match in all_refunds and reassign the table.

给出输出:

>all_refunds
  ordernumber amount  status
3   235984258  50.20 pending
4   283478566 102.45 pending
> registered_refunds
  ordernumber amount  status
1   123456789  150.5 pending
2   235641458  250.3 pending

With base R you can subset matching ordernumber's with following code:

all_refunds <- data.frame(
  ordernumber = c(123456789, 235641458,     235984258,  283478566),
  amount = c(150.50, 250.30, 50.20, 102.45),
  status = rep("pending", 4)
)

manual_refunds <- data.frame(
  ordernumber = c(123456789, 235641458),
  amount = c(150.50, 250.30)
)

matching <- all_refunds$ordernumber %in% manual_refunds$ordernumber #Find matching ordernumbers.

You can then make a new table with matching rows and remove the rows from all_refunds table, like this:

registered_refunds <- all_refunds[matching, ] #Select only matching from all_refunds
all_refunds <- all_refunds[!matching, ] #Select rows that DO NOT match in all_refunds and reassign the table.

Giving the output:

>all_refunds
  ordernumber amount  status
3   235984258  50.20 pending
4   283478566 102.45 pending
> registered_refunds
  ordernumber amount  status
1   123456789  150.5 pending
2   235641458  250.3 pending
冷默言语 2025-02-11 01:31:14

您可以尝试

all_refund <- read.table(text = "number ordernumber Amount  Status
1   123456789   150.50  pending
2   235641458   250.30  pending
3   235984258   50.20   pending
4   283478566   102.45  pending", header = T)
manually <- read.table(text = "number   ordernumber Amount  Status
1   123456789   150.50  refunded
2   235641458   250.30  refunded", header = T)

all_refund[!(all_refund$ordernumber %in% manually$ordernumber),]

  number ordernumber Amount  Status
3      3   235984258  50.20 pending
4      4   283478566 102.45 pending

You may try

all_refund <- read.table(text = "number ordernumber Amount  Status
1   123456789   150.50  pending
2   235641458   250.30  pending
3   235984258   50.20   pending
4   283478566   102.45  pending", header = T)
manually <- read.table(text = "number   ordernumber Amount  Status
1   123456789   150.50  refunded
2   235641458   250.30  refunded", header = T)

all_refund[!(all_refund$ordernumber %in% manually$ordernumber),]

  number ordernumber Amount  Status
3      3   235984258  50.20 pending
4      4   283478566 102.45 pending
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文