为 R 中的许多列创建新变量

Create new variable for many columns in R

假设我有一些数据,我想为多个变量做一个循环,我从旧变量中减去“1”并创建一个新变量,将 'p' 添加到原始变量名称。这是一些数据。假设我有 var1 和 var2,想创建 var1p 和 var2p,其中 var1p = var1 - 1。我如何为多个变量循环这个?数据下方是我的尝试,但没有完成工作。我可以减去“1”,但不确定如何将这些值附加到 df 新变量名称。

df <- read.table(text =
                   "id var1 var2 var2p  var3p group
                 1  12    3    11   2    1
                 2  8     6    7   5    1
                 3  25    30   24   5    2
                 4  26    31   25   30    2
                 5  22    29   21   28    2", header = T)


new_data <- data.frame(lapply(df, function(x) x-1))

我们可以使用 dplyr 中的 mutate_at 根据对感兴趣的列的计算创建新列

library(dplyr)
df %>% 
    mutate_at(vars(starts_with('var')), funs(p = .-1))

或使用data.table

library(data.table)
nm1 <- grep("var", names(df))
setDT(df)[, (nm1) := .SD - 1, .SDcols = nm1]

在 base R 中,我们可以创建一个包含 select (cols) 列的变量,仅从这些列中减去 -1,然后将 "p" 添加到它们的名称中以创建新的列。

cols <- c("var1", "var2")
df[paste0(cols, "p")] <- df[cols] - 1

df
#  id var1 var2 group var1p var2p
#1  1   12    3     1    11     2
#2  2    8    6     1     7     5
#3  3   25   30     2    24    29
#4  4   26   31     2    25    30
#5  5   22   29     2    21    28