为 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
假设我有一些数据,我想为多个变量做一个循环,我从旧变量中减去“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