r - 如何逐行减去一个向量,保持数据帧(df)列的均值来自 df?

标签 r dataframe

抱歉,标题令人困惑……这是我想用可能的解决方案做的事情:

> 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/

相关文章:

R:如何删除data.frame中的某些行

r - 使用 ggmosaic::product 的 ggplot 自定义函数内的准引用问题

python - 根据列值加入 Pandas 数据框

r - 同时为 dplyr 中的分组值导出唯一值和汇总值的有效方法

R:从 h2o.randomForest() 和 h2o.gbm() 绘制树

在傅立叶插值的上下文中返回函数的 'traditional' 符号

使用 as.POSIXlt/ct 进行 R 预测

dataframe - 有没有办法限制 spark 数据帧类型中的字符串长度?

python - Pandas 数据帧错误 "tuple index out of range"

python - 使用 Pandas Python 进行透视以获取 bool 值