首页 > 解决方案 > 在 r 中添加基于相同列和其他两列的计算列

问题描述

我正在尝试添加基于相同值的计算列和根据第三列中的值计算的另一列。共有三列,yearidvalue。如果2011 的id与 2005 的id匹配,则从 2011 的中减去2005 的。因此差异显示 10-11=-1、20-5=15 和 30-16=14...其余行可以是 0 或 NA,没关系。下表显示了带有新差异列的结果表。

在此处输入图像描述

我知道我可以将数据拆分为两个表,然后如果两个表按年份和 ID 排序相同,则通过简单的减法创建列,但这不是这个特定问题的选项。尝试考虑如何使用 case_when 或 ifelse ,但它令人费解,无法理解它。我发现了一些示例,但它们没有解决这个问题-它们主要基于仅使用两列或三列之间的比较……但是,其中一个值来自同一列。我该如何解决这个问题?

非常感谢您的帮助。

这是原始表的代码:

dat <- data.frame(year=c(2011,2011,2011,2005,2005,2005),
              id=c(1,2,3,1,2,3),
              value=c(10,20,30,11,5,6))

标签: r

解决方案


对于您对 Ronak 的回答的评论中有多个 id 的情况,您可以执行以下操作:

library(tidyr)
library(dplyr)

dat2 |> 
  pivot_wider(id, values_from = value, names_from = year) |> 
  unnest(c(`2011`, `2005`)) |> 
  mutate(difference = `2011` - `2005`) |> 
  pivot_longer(c(`2011`, `2005`), names_to = "year")

# A tibble: 10 x 4
      id difference year  value
   <dbl>      <dbl> <chr> <dbl>
 1     1         -1 2011     10
 2     1         -1 2005     11
 3     1         -1 2011     10
 4     1         -1 2005     11
 5     2         15 2011     20
 6     2         15 2005      5
 7     2         15 2011     20
 8     2         15 2005      5
 9     3         24 2011     30
10     3         24 2005      6

推荐阅读