R 如何使用Lappy在数据帧中创建新变量并重命名它们

R 如何使用Lappy在数据帧中创建新变量并重命名它们,r,dataframe,lapply,R,Dataframe,Lapply,我在数据框中有一些数值变量。我想创建以均值为中心的新变量,将新变量添加到我的数据框中,并重命名新变量,使其与原始变量具有相同的名称,但后缀为“\m” 目前,我只能分两步来完成这项工作,我正在使用列索引进行子集设置,这不是很灵活 有没有一种方法可以将我的两阶段方法合并为一个阶段,同时避免使用列索引,这样过程就可以运行,而不必计算我要表示中心的列数,然后计算出这意味着要向我的数据帧添加多少新列?如果有更好的方法,我不必使用lappy 以下是我当前方法的简化版本: df <- data.fram

我在数据框中有一些数值变量。我想创建以均值为中心的新变量,将新变量添加到我的数据框中,并重命名新变量,使其与原始变量具有相同的名称,但后缀为“\m”

目前,我只能分两步来完成这项工作,我正在使用列索引进行子集设置,这不是很灵活

有没有一种方法可以将我的两阶段方法合并为一个阶段,同时避免使用列索引,这样过程就可以运行,而不必计算我要表示中心的列数,然后计算出这意味着要向我的数据帧添加多少新列?如果有更好的方法,我不必使用
lappy

以下是我当前方法的简化版本:

df <- data.frame(a = letters[1:10], b = 1:10, c = 11:20)

df[4:5] <- lapply(df[2:3], function(x) {
      y <- scale(x, center = T, scale = F)
    }
)

names(df)[4:5] <- lapply(names(df)[2:3], function(x) {
    y <- paste0(x, "_m")
    }
)

df在R基中,您可以

cbind(df, setNames(lapply(df[2:3], scale, scale=F),
                   paste0(names(df)[2:3], "_m")))
返回

   a  b  c  b_m  c_m
1  a  1 11 -4.5 -4.5
2  b  2 12 -3.5 -3.5
3  c  3 13 -2.5 -2.5
4  d  4 14 -1.5 -1.5
5  e  5 15 -0.5 -0.5
6  f  6 16  0.5  0.5
7  g  7 17  1.5  1.5
8  h  8 18  2.5  2.5
9  i  9 19  3.5  3.5
10 j 10 20  4.5  4.5

新列的名称应用于
setNames

库(dplyr);fun1@Sotos这太棒了,谢谢,我不知道
mutate\u if
,或者你可以使用
funs
更改列的名称。还有
mutate\u at
可以方便你的案例,谢谢@Sotos的额外提示。@Imo谢谢,我不知道
setNames
函数。我总是使用
名称
,但这解决了我的问题。