我在数据框中有一些数字变量。我要创建新变量,这些变量是原始变量的均值中心版本,将新变量添加到我的数据框中,然后重命名新变量,以便它们与原始变量具有相同的名称,但后缀为“ _m”。
目前,我只能分两个步骤执行此操作,而我正在使用列索引进行子集设置,这不是很灵活。
有没有一种方法可以将我的两个阶段的方法合并为一个,并且还避免使用列索引,这样该过程就可以进行,而不必计算我要平均居中的列数,然后可以算出这意味着要添加多少个新列到我的数据帧?lapply
如果有更好的方法,我就不必使用。
这是我当前方法的简化版本:
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")
}
)
在基数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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句