抱歉,标题令人困惑……这是我想用可能的解决方案做的事情:
> 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
但是数据框将具有命名的列和行并且非常大。这就是为什么我对这个解决方案感到不舒服,并且想知道是否有一个程序化的解决方案(当然)不求助于循环并且不需要笨拙的双重换位(甚至可能完全适合单个线)。
最佳答案
您想对数据框中的所有列进行均值校正吗?
df <- scale(df, center=TRUE, scale=FALSE)
如果有些列不是数字(因子和字符),那么您必须对它们进行测试:
numeric <- sapply(df, is.numeric)
df[numeric] <- scale(df[numeric], center=TRUE, scale=FALSE)
请注意,这会将您的 df 转换为矩阵,作为缩放的一部分。如果您不希望发生转换,您也可以这样做:
df[] <- lapply(df, function(x) x - mean(x))
关于r - 如何逐行减去一个向量,保持数据帧(df)列的均值来自 df?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065929/