gpt4 book ai didi

r - 如何在数据框中相关地减去两列

转载 作者:行者123 更新时间:2023-12-05 00:51:01 25 4
gpt4 key购买 nike

上下文

我们想知道如何将列两两相减。具体来说,我们要减去数据框的列,如下所示:

  • u_2018 - u_2019
  • u_2019 - u_2020
  • u_2020 - u_2021
  • u_2021 - u_2022

我们在几个 stackoverflow 问题帖子中寻找最佳解决方案,就像这样 (How to subtract two columns using tidyverse mutate with columns named by external variables),但唯一实现的不受欢迎的方法在 R 代码使用部分中详述。 R session 版本是4.2.0dplyr包版本是1.0.9

在 R session 中输入数据

> dat
# A tibble: 6 × 5
u_2018 u_2019 u_2020 u_2021 u_2022
<int> <int> <int> <int> <int>
1 90035 88015 76135 50725 16517
2 20 NA NA 13792 12793
3 555 620 15032 19309 6479
4 11171 11782 10281 8974 3901
5 NA 116896 40169 13191 3610

使用的R代码


dat %>%
mutate(
diff_2018_2019 = u_2018 - u_2019,
diff_2019_2020 = u_2019 - u_2020,
diff_2020_2021 = u_2020 - u_2021,
diff_2021_2022 = u_2021 - u_2022)

问题

我们想知道用两列减去两列的最佳解决方案。也许一种方法包括 mutate_at()across 来获得之间的差异并将减法保存在新列中。

提前致谢

最佳答案

你可以使用 pmap_dfr + diff:

library(purrr)

pmap_dfr(df, ~ -diff(c(...))) %>%
set_names(~ as.integer(sub('u_', '', .x)) %>% paste('dif', . - 1, ., sep = '_'))

# # A tibble: 5 × 4
# dif_2018_2019 dif_2019_2020 dif_2020_2021 dif_2021_2022
# <int> <int> <int> <int>
# 1 2020 11880 25410 34208
# 2 NA NA NA 999
# 3 -65 -14412 -4277 12830
# 4 -611 1501 1307 5073
# 5 NA 76727 26978 9581

注意diff()默认是后者减去前者,所以需要用-diff()取反。


数据
df <- structure(list(u_2018 = c(90035L, 20L, 555L, 11171L, NA), u_2019 = c(88015L, 
NA, 620L, 11782L, 116896L), u_2020 = c(76135L, NA, 15032L, 10281L, 40169L),
u_2021 = c(50725L, 13792L, 19309L, 8974L, 13191L), u_2022 = c(16517L,
12793L, 6479L, 3901L, 3610L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))

关于r - 如何在数据框中相关地减去两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73154530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com