对不起令人困惑的标题...这是我想要的可能的解决方案:
> df <- data.frame(a=c(1,2,3),b=c(4,5,6))
> v <- colMeans(df)
> df
a b
1 1 4
2 2 5
3 3 6
> v
a b
2 5
> t(t(df)-v)
a b
[1,] -1 -1
[2,] 0 0
[3,] 1 1
Run Code Online (Sandbox Code Playgroud)
但是数据框将具有命名的列和行并且非常大.这就是为什么我对这个解决方案感到不舒服,想知道是否有一个程序性的解决方案(当然)没有采用循环而且不需要笨拙的双转置(甚至可能整齐地适合单个解决方案)线).
您想要更正数据框中的所有列吗?
df <- scale(df, center=TRUE, scale=FALSE)
Run Code Online (Sandbox Code Playgroud)
如果有不是数字的列(因子和字符),那么你将不得不测试它们:
numeric <- sapply(df, is.numeric)
df[numeric] <- scale(df[numeric], center=TRUE, scale=FALSE)
Run Code Online (Sandbox Code Playgroud)
请注意,这会将您的df转换为矩阵,作为缩放的一部分.如果您不希望转换发生,您还可以:
df[] <- lapply(df, function(x) x - mean(x))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3366 次 |
| 最近记录: |