R对数据框的每行和每列应用计算

R对数据框的每行和每列应用计算,r,apply,sapply,R,Apply,Sapply,在一个数据帧中,我想从该列的每个元素中减去每列的平均值 示例数据帧: x <- c(1,2,3,4,5,6,7,8,9,10) y <- c(2,3,2,3,2,3,2,3,2,3) z <- c(100,200,300,400,500,600,700,800,900,1000) df <- data.frame(x, y, z) # get the mean of each column mu <- colMeans(df) 但我不知道如何在一行代码中编写有趣

在一个数据帧中,我想从该列的每个元素中减去每列的平均值

示例数据帧:

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(2,3,2,3,2,3,2,3,2,3)
z <- c(100,200,300,400,500,600,700,800,900,1000)
df <- data.frame(x, y, z)

# get the mean of each column
mu <- colMeans(df)
但我不知道如何在一行代码中编写有趣的参数来实现这一点。

这里有一种方法:

do.call(cbind,lapply(df,function(col)col-mean(col)))
#          x    y    z
#  [1,] -4.5 -0.5 -450
#  [2,] -3.5  0.5 -350
#  [3,] -2.5 -0.5 -250
#  [4,] -1.5  0.5 -150
#  [5,] -0.5 -0.5  -50
#  [6,]  0.5  0.5   50
#  [7,]  1.5 -0.5  150
#  [8,]  2.5  0.5  250
#  [9,]  3.5 -0.5  350
# [10,]  4.5  0.5  450
这里有一个方法:

do.call(cbind,lapply(df,function(col)col-mean(col)))
#          x    y    z
#  [1,] -4.5 -0.5 -450
#  [2,] -3.5  0.5 -350
#  [3,] -2.5 -0.5 -250
#  [4,] -1.5  0.5 -150
#  [5,] -0.5 -0.5  -50
#  [6,]  0.5  0.5   50
#  [7,]  1.5 -0.5  150
#  [8,]  2.5  0.5  250
#  [9,]  3.5 -0.5  350
# [10,]  4.5  0.5  450

要保留data.frame结构,可以执行以下操作:

as.data.frame(Map(`-`, df, mu))

还有一个非常方便的缩放函数,但它可以将数据转换为矩阵:

scale(df, center = TRUE, scale = FALSE)
如果您不介意转换为矩阵,则还可以执行以下操作:

t(t(df) - mu)

要保留data.frame结构,可以执行以下操作:

as.data.frame(Map(`-`, df, mu))

还有一个非常方便的缩放函数,但它可以将数据转换为矩阵:

scale(df, center = TRUE, scale = FALSE)
如果您不介意转换为矩阵,则还可以执行以下操作:

t(t(df) - mu)

太好了,谢谢。我也完全忘记了矩阵操作。太好了,谢谢。我也完全忘记了矩阵操作。现在为什么我没有想到。。!现在为什么我没想到。。!