r - 在dplyr mutate中,如何引用多个类似命名的变量

标签 r dplyr tidyverse

我有一个data.frame与此类似:

library(tidyverse)
df <- data.frame(
  var_1_a = 1:100,
  var_1_b = 101:200,
  var_two_a = 5:104, 
  var_two_b = 1:100
)
head(df)
  var_1_a var_1_b var_two_a var_two_b
1       1     101         5         1
2       2     102         6         2
3       3     103         7         3
4       4     104         8         4
5       5     105         9         5
6       6     106        10         6    

我想找出具有相似名称的变量的差异。由于这里只有两个,因此很容易使用以下内容来完成:

df %>%
  mutate(var_1_new = var_1_a - var_1_b,
         var_two_new = var_two_a - var_two_b)

但在真实数据中,我大约有一百个这样的数据。与将它们全部打印出来相比,有什么更简单的方法可以做到这一点?

PS - 如果这样更容易,我有一个包含所有变量的列表(例如 mylist <- list("var_1", "var_two")

最佳答案

您可以使用下面的代码。假设总是只有两个名称相似的变量。

mylist <- list("var_1", "var_two")
get_similar_names <- function(x) grep(x,names(df))
get_diff <- function(x) Reduce(`-`, subset(df,select=x) )

matches <- lapply(mylist, get_similar_names )
out <- lapply(matches, get_diff)
names(out) <- paste0(mylist,"_new")
out.df <- data.frame(out)

head(out.df)
  var_1_new var_two_new
1      -100           4
2      -100           4
3      -100           4
4      -100           4
5      -100           4
6      -100           4

关于r - 在dplyr mutate中,如何引用多个类似命名的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41868780/

相关文章:

r - 将线性模型应用于指定变量时使用映射

r - 使用 RJSONIO 在 R 中解析深度嵌套的 JSON 结构

r - 使用多个 CPU,我可以使用哪些包来计算线性模型?

r - 使用 dplyr 创建一个按组规范化的新列

r - 使用 readr::parse_double() 解析双分组数

R:使用 tidyverse 将 NA 替换为 df 中的其他变量

r - 如何在R中组合多个图?

r - ranging()对分组数据框不起作用

r - 使用 dplyr 在新列中添加彩色点

r - 有没有办法在 purrr::map 中自动传播 NULL?