如何有条件地选择一列,并从 R 中另一个有条件选择的列中的行中减去这些行中的值?

2024-05-25

我知道我的问题标题很冗长,可能很难理解,所以我会尽力在这里解释一下。

这是一些示例数据:

transactions <- tibble(id = seq(1:7),
                       day = paste(rep("day", each = 7), seq(1:7), sep = ""),
                       sent_to = c(NA, "Garden Cinema", "Pasta House", NA, "Blue Superstore", "Jane", "Joe"),
                       received_from = c("ATM", NA, NA, "Sarah", NA, NA, NA),
                       reference = c("add_cash", "cinema_tickets", "meal", "gift", "shopping", "reimbursed", "reimbursed"),
                       decrease = c(NA, 10.8, 12.5, NA, 15.25, NA, NA),
                       increase = c(50, NA, NA, 30, NA, 5.40, 7.25),
                       reimbursed_id = c(NA, "R", "R", NA, NA, 2, 3))
# # A tibble: 7 × 7
#      id   day   sent_to         received_from reference      decrease  increase reimbursed_id
#    <int>  <chr> <chr>           <chr>         <chr>          <dbl>     <dbl>    <chr>
# 1     1   day1  NA              ATM           add_cash       NA        50       NA
# 2     2   day2  Garden Cinema   NA            cinema_tickets 10.8      NA       R
# 3     3   day3  Pasta House     NA            meal           12.5      NA       R
# 4     4   day4  NA              Sarah         gift           NA        30       NA
# 5     5   day5  Blue Superstore NA            shopping       15.2      NA       NA
# 6     6   day6  Jane            NA            reimbursed     NA        5.4      2
# 7     7   day7  Joe             NA            reimbursed     NA        7.25     3

解释reimbursed_id column:

  • R表示减少列中的值并不代表用户的实际支出,因为它包括代表某人支付的金额
  • 2(或任何数字)代表id用户得到偿还(归还借入金额)

期望的结果:

我想向该数据集添加一个“actual_decrease”列,该列本质上是查看reimbursed_id数值栏,收集报销金额increase列并从中的值中减去它decrease对于各自的id's.

我不确定如何更好地解释这一点,所以这是期望的结果:

# # A tibble: 7 × 9
#      id   day   sent_to         received_from reference      decrease  increase reimbursed_id  actual_decrease
#    <int>  <chr> <chr>           <chr>         <chr>          <dbl>     <dbl>    <chr>          <dbl>
# 1     1   day1  NA              ATM           add_cash       NA        50       NA             NA
# 2     2   day2  Garden Cinema   NA            cinema_tickets 10.8      NA       R              5.4
# 3     3   day3  Pasta House     NA            meal           12.5      NA       R              5.25
# 4     4   day4  NA              Sarah         gift           NA        30       NA             NA
# 5     5   day5  Blue Superstore NA            shopping       15.2      NA       NA             15.2
# 6     6   day6  Jane            NA            reimbursed     NA        5.4      2              NA
# 7     7   day7  Joe             NA            reimbursed     NA        7.25     3              NA

除了一个非常复杂的函数之外,我想不出任何可以帮助解决这个问题的函数ifelse()语句,也许还有一个 for 循环(但我更愿意避免循环)。

请注意,您的答案最好不涉及行号,而是涉及id列,因为对于我的实际数据集,这些值不对应。

任何意见都表示赞赏:)


解决此问题的一种选择是通过联接。基本上,我首先通过过滤“报销”交易来创建一个辅助 df,然后将其连接到原始 df 以最终计算actual_decrease:

library(dplyr, warn = FALSE)
library(tidyr)

transactions_help <- transactions |> 
  filter(reference == "reimbursed") |> 
  select(reimbursed_decrease = increase, reimbursed_id) |> 
  mutate(reimbursed_id = as.numeric(reimbursed_id))

transactions <- transactions |> 
  left_join(transactions_help, by = c("id" = "reimbursed_id")) |> 
  replace_na(list(reimbursed_decrease = 0)) |> 
  mutate(actual_decrease = decrease - reimbursed_decrease)

transactions
#> # A tibble: 7 × 10
#>      id day   sent_to    recei…¹ refer…² decre…³ incre…⁴ reimb…⁵ reimb…⁶ actua…⁷
#>   <dbl> <chr> <chr>      <chr>   <chr>     <dbl>   <dbl> <chr>     <dbl>   <dbl>
#> 1     1 day1  <NA>       ATM     add_ca…    NA     50    <NA>       0      NA   
#> 2     2 day2  Garden Ci… <NA>    cinema…    10.8   NA    R          5.4     5.4 
#> 3     3 day3  Pasta Hou… <NA>    meal       12.5   NA    R          7.25    5.25
#> 4     4 day4  <NA>       Sarah   gift       NA     30    <NA>       0      NA   
#> 5     5 day5  Blue Supe… <NA>    shoppi…    15.2   NA    <NA>       0      15.2 
#> 6     6 day6  Jane       <NA>    reimbu…    NA      5.4  2          0      NA   
#> 7     7 day7  Joe        <NA>    reimbu…    NA      7.25 3          0      NA   
#> # … with abbreviated variable names ¹​received_from, ²​reference, ³​decrease,
#> #   ⁴​increase, ⁵​reimbursed_id, ⁶​reimbursed_decrease, ⁷​actual_decrease
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有条件地选择一列,并从 R 中另一个有条件选择的列中的行中减去这些行中的值? 的相关文章

  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 将数据框中重叠的范围合并到唯一的组中

    我有一个 n 行 3 的数据框 df lt data frame start c 178 400 983 1932 33653 end c 5025 5025 5535 6918 38197 group c 1 1 2 2 3 df sta
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 计算 R 中各列的唯一值

    我正在尝试创建一个新变量 其中包含来自两个不同列的字符串值的唯一计数 所以我有这样的东西 例如 A tibble 4 x 2 names partners
  • 在 Rcpp 中使用其他包中的 C 函数

    我试图从 C 函数中的 cubature 包调用 C 例程来执行多维积分 我试图重现的基本 R 示例是 library cubature integrand lt function x sin x adaptIntegrate integr
  • 如何在 R 或 Python 中制作旭日图?

    到目前为止 我一直无法找到一个可以创建旭日图的 R 库约翰 斯塔斯科 http www cc gatech edu gvu ii sunburst 有人知道如何在 R 或 Python 中实现这一点吗 在极坐标投影中使用 matplotli
  • ggplot2:如何标记事件发生的日期

    我想从第二个情节中获取第一个情节的信息 第二张图表示事件发生的天数 它看起来更宽 因为它没有图例 但它是相同的时间尺度 我选择在第一个图中手动分配颜色 I would like to overlay the second plot dots
  • R:如何获取该月的周数

    我是 R 新手 我想要该日期所属月份的周数 通过使用以下代码 gt CurrentDate lt Sys Date gt Week Number lt format CurrentDate format U gt Week Number 3
  • R 中用于调用 sed、rsync、ssh 等的 system() 的替代方案:函数是否存在,我应该编写自己的函数,还是我错过了重点?

    最近 我发现了base files命令 与其他命令一起使用 例如getwd write lines file show dir等等 似乎有许多 bash 函数的 R 等价物 我还在 R 中编写了一些函数来简化对ssh and rsync通过
  • SPSS 中的标准化残差与 R rstandard(lm()) 不匹配

    在寻找 R 相关解决方案时 我发现 R 和 SPSS 版本 24 在计算简单线性模型中的标准化残差方面存在一些不一致 看来SPSS所谓的标准化残差匹配 R学生化残差 我完全不认为某处存在软件错误 但显然这两个程序之间存在差异 看看这个例子
  • 实三次多项式的最快数值解?

    R 问题 寻找最快的方法来数值求解一堆已知具有实系数和三个实根的任意三次方程 据报道 R 中的 polyroot 函数对复杂多项式使用 Jenkins Traub 算法 419 但对于实多项式 作者参考了他们早期的工作 对于实三次或更一般的
  • 任意列中包含字符串的子集行

    我有一个如下所示的数据集 Col1 Col2 Col3 abckel NA 7 jdmelw njabc NA 8 jdken jdne 如何对数据集进行子集化 使其仅保留包含字符串 abc 的行 最终预期输出 Col1 Col2 Col3
  • Shiny:动态数据框构建; renderUI、观察、reactiveValues

    我认为如何使用 Shiny 的 renderUI 功能动态子集数据的问题经常出现 但我很难理解何时使用 renderUI 带有 uiOutput 而不是其他功能 包括观察 反应 反应值甚至条件面板 我想构建一个完全交互式的数据框架 其中每个
  • 麦当劳 omega:R 中的警告

    我正在计算几种不同尺度的欧米茄 并在 R 中使用不同的 omega 函数获取不同比例的不同警告消息 我的问题是如何解释这些警告以及报告检索到的 omega 统计数据是否安全 当我使用 从 alpha 到 omega 内部一致性估计普遍问题的

随机推荐