如何使用lapply在数据框中创建新变量并重命名它们

时间:2017-02-10 15:53:01

标签: r dataframe lapply

我在数据框中有一些数字变量。我想创建新的变量,这些变量是原始的以均值为中心的版本,将新变量添加到我的数据帧,并重命名新变量,使它们与原始变量具有相同的名称,但后缀为“_m”。

目前,我只能分两步完成,我使用列索引进行子集化,这不是很灵活。

有没有办法将我的两阶段方法合并为一个,并且还避免使用列索引,以便该过程可以工作,而不必计算我想要的多少列中心,然后确定有多少新列是否意味着要添加到我的数据框?如果有更好的方法,我不必使用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") } )

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

addMeta

1 个答案:

答案 0 :(得分:4)

在基地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

相关问题