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)
太好了,谢谢。我也完全忘记了矩阵操作。太好了,谢谢。我也完全忘记了矩阵操作。现在为什么我没有想到。。!现在为什么我没想到。。!