根据条件清理数据框

2024-03-01

我有一个看起来像这样的数据框。

虚拟数据:

df1 <- structure(list(Date = c("24/06/2002", "24/06/2002", "25/06/2002", 
                               "02/07/2002","24/07/2002", "08/07/2002",
                               "08/07/2002", "15/07/2002", "17/07/2002", 
                               "22/07/2002", "22/07/2002", "28/07/2002", "29/07/2002"), 
                      payment = c(200,   1000, 1000, 
                                  -1000,-1000, 1200,
                                  -1200, 1200, 1200,
                                  200, 56700, -56700, -200), 
                      Code = c("ABC", "M567", "M567", "M567", 
                               "M567","M567", "M567", 
                                "M567", "M567", "M300", 
                               "M678", "M678", "ABC"), 
                      ID = c(NA, "98","98","M11",
                             NA,"K999", 
                             "K999", "111", "111", "11",
                             "12345", NA, NA)), row.names = c(NA, -13L), class = "data.frame")

有些行只是付款退回:

         Date payment Code    ID
1  24/06/2002     200  ABC  <NA>
2  24/06/2002    1000 M567    98
3  25/06/2002    1000 M567    98
4  02/07/2002   -1000 M567   M11
5  24/07/2002   -1000 M567  <NA>
6  08/07/2002    1200 M567  K999
7  08/07/2002   -1200 M567  K999
8  15/07/2002    1200 M567   111
9  17/07/2002    1200 M567   111
10 22/07/2002     200 M300    11
11 22/07/2002   56700 M678 12345
12 28/07/2002  -56700 M678  <NA>
13 29/07/2002    -200  ABC  <NA>

我想通过考虑代码和 ID 来删除具有相同 +ve 和 -ve 付款的行。 IE。,

  • 如果代码和 ID 列匹配并且付款正在取消,则删除这两列
  • 如果 +ve 付款时存在 ID,而 -ve 付款时不存在 ID,反之亦然,则仅采用 Code 进行分组
  • 如果 +ve 和 -ve 都缺少 ID,则仅采用 Code 列进行分组

因此,生成的数据框应该是这样的:

  Date       payment Code  ID   
  <chr>        <dbl> <chr> <chr>
1 22/07/2002     200 M300  11   
2 15/07/2002    1200 M567  111  
3 17/07/2002    1200 M567  111  
4 25/06/2002    1000 M567  98   
5 02/07/2002   -1000 M567  M11     


   

谁能帮我这个?


我们按“代码”列进行分组,然后为“付款”的每个唯一元素创建一个序列列,然后将序列也与“代码”添加到fill前一个非 NA id 中“ID”中缺失的元素,ungroup,删除“ID”仍然为 NA 的行(drop_na),创建一个付款列absolute 值,按“代码”、“ID”和绝对付款列排序,然后按相同列分组,通过采用以下序列创建分组列sign“付款”的值,添加为分组列,以及filter仅具有单行的组

library(dplyr)
library(data.table)
library(tidyr)
library(lubridate)
df1 %>% 
  group_by(Code) %>%
  filter(sum(payment) != 0) %>%
  arrange(Code, abs(payment), !is.na(ID)) %>%
  mutate(ind = rowid(payment)) %>%
  group_by(ind, .add = TRUE) %>% 
  fill(ID, .direction = 'downup') %>% 
  ungroup %>%
  drop_na(ID) %>% 
  mutate(absPayment = abs(payment)) %>% 
  arrange(ID, Code, absPayment) %>%
  group_by(Code, ID, absPayment) %>%
  mutate(grp = rowid(sign(payment))) %>% 
  group_by(grp, .add = TRUE) %>%
  filter(n() == 1) %>% 
  ungroup %>%   
  select(names(df1))

-output

# A tibble: 5 × 4
  Date       payment Code  ID   
  <chr>        <dbl> <chr> <chr>
1 22/07/2002     200 M300  11   
2 15/07/2002    1200 M567  111  
3 17/07/2002    1200 M567  111  
4 25/06/2002    1000 M567  98   
5 02/07/2002   -1000 M567  M11  

data

df1 <- structure(list(Date = c("24/06/2002", "24/06/2002", "25/06/2002", 
"02/07/2002", "24/07/2002", "08/07/2002", "08/07/2002", "15/07/2002", 
"17/07/2002", "22/07/2002", "22/07/2002", "28/07/2002", "29/07/2002"
), payment = c(200, 1000, 1000, -1000, -1000, 1200, -1200, 1200, 
1200, 200, 56700, -56700, -200), Code = c("ABC", "M567", "M567", 
"M567", "M567", "M567", "M567", "M567", "M567", "M300", "M678", 
"M678", "ABC"), ID = c(NA, "98", "98", "M11", NA, "K999", "K999", 
"111", "111", "11", "12345", NA, NA)), row.names = c(NA, -13L
), class = "data.frame")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据条件清理数据框 的相关文章

  • 导入 pandas 显示 ImportError: 无法导入名称哈希表

    我已经在 python 3 3 上安装了 pandas 代码如下 import csv import pandas from pandas import DataFrame csvdata pandas read csv datafile
  • 需要在R中跳过不同数量的行

    我正在使用以下代码来处理我的数据 但最近我意识到使用skip 27 在数据开始之前跳过存储在我的文件中的信息 不是一个好的选择 因为每个文件中要跳过的行数不同我的目标是读取存储在多个文件夹中的各种txt文件 并非所有文件都有相同的列数 列的
  • R:如何将字符/数字转为1,NA转为0?

    有没有一种简单的方法可以将列的字符 数字变为 1 将 NA 变为 0 这里有一些示例数据 我想将其应用于 3 4 structure list Item Code c 176L 187L 191L 201L 217L 220L Item x
  • Pandas:使用日期时间索引列表从 DataFrame 中提取多行

    我有一个 pandas Dataframe 其索引具有秒频率 DatetimeIndex 2015 12 28 05 20 05 2015 12 28 05 20 06 2015 12 28 05 20 07 2015 12 28 05 2
  • 如何在Rstudio中快速给几个单词加上引号?

    如何将 MI ID FL 转换为 MI ID FL 而无需键入每个双引号 Hmisc 包有一个函数 Cs 它将评估逗号分隔的文本是否带有引号 Cs MI ID FL becomes MI ID FL
  • rvest 函数 html_nodes 返回 {xml_nodeset (0)}

    我正在尝试抓取以下网站的数据框 http stats nba com game 0041700404 playbyplay http stats nba com game 0041700404 playbyplay 我想创建一个表格 其中包
  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 在 RGL 中将立方体绘制到 3D 散点图中

    我正在尝试向 3D 散点图添加较小的立方体 网格 具有指定边长 我希望立方体位于原点 我该怎么做呢 我已经玩过cube3d 但我似乎无法将立方体正确定位 也无法使其成为网格 因此我可以看到它包含的数据点 这是我所拥有的 library rg
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • ggplot2:带有 geom_line 的 x 轴因子不起作用

    我想要一个线图 其中value绘制为函数expt每级一行var 这是我的数据 lines lt expt var value 1 none p 0 183065327746799 2 none p 0 254234138384241 3 n
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x
  • 更改ggplot2中的字体

    曾几何时 我改变了我的ggplot2字体使用windowsFonts Times windowsFont TT Times New Roman 现在 我无法摆脱这一切 在尝试设置family in ggplot2 theme 当我用不同的字
  • 如何在R中实现countifs函数(excel)

    我有一个包含 100000 行数据的数据集 我尝试做一些countifExcel 中的操作 但速度慢得惊人 所以我想知道R中是否可以完成这种操作 基本上 我想根据多个条件进行计数 例如 我可以指望职业和性别 row sex occupati
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d

随机推荐

  • 如何在大型机 COBOL 中“休眠”?

    我想我正在使用 Enterprise COBOL for z OS 模拟标准 C 库的 sleep 函数等功能的技术是什么 可能最简单的方法是使用语言环境可调用服务 https www ibm com docs en zos 2 4 0 t
  • 始终独立于目标执行 Ant 操作

    有没有办法在 Ant 构建文件中指定诸如 之类的操作 每次 ant 读取构建文件时都会执行该操作 无论调用的目标是什么 背景是 我希望在模板不存在时自动从模板创建 properties 文件 我知道 我可以指定一个执行此操作的目标 然后将其
  • 使用依赖项从 Swift 2.3 迁移到 Swift 3

    我正在努力将我的项目从 Swift 2 3 迁移到 Swift 3 但我通过 Cocoapods 使用的第三方框架遇到了问题 其中许多已经升级到 Swift 3 但也有一些尚未升级 当我构建项目时 出现错误 使用 Swift 2 3 编译的
  • 将图像放置在 CSS 中另一个现有的 `` 上

    我正在做一个页面 其中显示视频的缩略图 当您单击时 它会弹出一个 YouTube 视频 这个缩略图是 195x195 的简单图像 但最终客户端会按原样上传 我想通过 CSS 在视频图像上添加一个 播放图标 与 IE7 兼容 我不知道如何处理
  • 如何将本地 ORC 文件转换为 CSV?

    我的本地计算机上有一个 ORC 文件 我需要其中的任何合理格式 例如 CSV JSON YAML 如何将 ORC 转换为 CSV Download https orc apache org docs java tools html 解压文件
  • 访问类内的函数指针

    我在类中定义函数指针并尝试通过该类的实例访问它 但它显示错误 这是代码 1 include
  • 无法在 Eclipse 中将项目添加到 Tomcat 服务器

    我无法将我的项目添加到 Eclipse 中的服务器 这是为什么 我安装了所有必要的工具 Web Dev Java EE 服务器适配器和 Tomcat 本身 一切 我配置了运行时环境 将所有 Java 版本调整为 JDK 6 因为它应该在 T
  • 有效计算边界自适应邻域平均值

    我有一张图像 其值范围为 0 到 1 我喜欢做的是简单的平均 但是 更具体地说 对于图像边界处的单元格 我想计算位于图像范围内的邻域 内核部分的像素平均值 事实上 这可以归结为适应 平均公式 的分母 即总和除以的像素数 我设法做到这一点 如
  • 将风格应用于第一个孩子?

    有没有某种方法可以将样式应用于容器的第一个 或最后一个或第 n 个 子容器 任何包含子容器的容器 我正在尝试自定义选项卡项目的外观 以便第一个选项卡具有与其他选项卡不同的边框半径 这就是我现在所拥有的
  • 让 Java servlet 充当代理的代码?

    我有两个 Java Web 应用程序 它们有一个映射到特定 URL 的 servlet red war WEB INF classes com me myorg red RedServlet maps to http red example
  • 一个更好的程序来计算数字的平方根

    我是 C 编程语言的初学者 我的任务是编写一个程序来计算自然数的平方根 而不使用math h或任何其他库函数 除了stdio h 看看我们的合作伙伴int自始至终 对于非平方数 我们求 n 的平方根的下限 现在我已经编写了这个程序 但它只适
  • 带 goto 的扩展 asm(包括 gcc 文档中的示例)无法编译

    一些扩展的汇编语句使用goto限定符无法使用 GCC 10 1 0 进行编译 具体来说 int foo int count asm goto dec 0 jb l stop r count stop return count stop re
  • 仍登录 MVC 站点,但无法调用 Web API

    我有一个 ASP NET MVC 站点 IdentityServer4 主机和一个 Web API 当我使用外部提供商 Facebook 登录 MVC 站点时 我登录得很好 从 MVC 站点我还可以正确使用 Web API 然而 第二天 我
  • PHP 中的百分号是什么意思?

    这到底是什么意思 number 3 2 7 7 这是modulus http ca php net manual en language operators arithmetic php如上所述 运算符返回除法运算的余数 例子 3 5返回
  • 在 Windows 上向 QProcess 发送 Ctrl+C

    抓紧你的马鞍 这是一个很长的马鞍 如果您不想阅读所有内容 请跳至 MCVE 部分 我正在尝试制定一个流程QProcess优雅地退出 我不控制有问题的进程如何退出 它只接受 Ctrl C 信号 令我困惑的是 这听起来非常简单明了QProces
  • 使用 Kafka Connect 将架构和数据更改从 MySQL 流式传输到 MySQL

    我们如何使用 Kafka 连接源连接器将架构和数据更改以及某种转换传输到另一个 MySQL 实例 如果我使用 Kafka 的 Python 库 confluence kafka 在加载到目标数据库之前消费和转换消息 是否有办法传播模式更改
  • ChipGroup单选

    我怎样才能强制ChipGroup表现得像RadioGroup就像总是至少有一个选定的项目一样 环境setSingleSelection true 如果您单击两次 还可以增加不选择任何内容的可能性Chip 为了防止所有芯片被取消选择 您可以使
  • numpy python:从一列中查找另一列中每个唯一值的最高值

    有人可以建议一种有效的方法来为另一列中的每个唯一值获取一列中的最高值吗 np array 看起来像这样 column0 column1 column2 column3 37367 421 231385 93 37368 428 235156
  • iOS 中可以使用 RFCOMM 吗?

    我在 iOS 开发方面相对较新 我想做一个跨平台的蓝牙应用程序 在Android中 我使用RFCOMM发送custom数据 如字符串 当我用谷歌搜索 iOS蓝牙 时 我找到了Core Bluetooth结果中的框架似乎是为低能耗连接而设计的
  • 根据条件清理数据框

    我有一个看起来像这样的数据框 虚拟数据 df1 lt structure list Date c 24 06 2002 24 06 2002 25 06 2002 02 07 2002 24 07 2002 08 07 2002 08 07