r - Demean R 数据框

标签 r plyr

我想贬低 R data.frame 中的多个列。使用 this question 中的示例

set.seed(999)
library(plyr)
library(plm)
# random data.frame
dat <- expand.grid(id=factor(1:3), cluster=factor(1:6))
dat <- cbind(dat, x=runif(18), y=runif(18, 2, 5))

#demean x and y
dat.2 <- ddply(dat, .(cluster), transform, x=x-mean(x), y=y-mean(y))

我的问题是我有(很多)超过 2 个变量,我想避免对此分析进行硬编码。总的来说,我是 plyr 的新手;为什么会这样

dat.2 <- ddply(dat[,c(x,y)],  .(cluster), transform, function(x) x - mean(x))

不工作?我是否遗漏了一些关键步骤?一般来说有更好的方法吗?

最佳答案

看看 colwise 仿函数。唯一需要注意的是 id 列。因此:

demean <- colwise(function(x) if(is.numeric(x)) x - mean(x) else x)
dat.2 <- ddply(dat, .(cluster), demean)

编辑:正如您所发现的,甚至还有一个 numcolwise 仿函数仅用于处理数字,因此您可以执行以下操作:

demean <- numcolwise(function(x) x - mean(x))
dat.2 <- ddply(dat, .(cluster), demean)

您还可以使用 scale 函数而不是定义自己的函数:

dat.2 <- ddply(dat, .(cluster), numcolwise(scale, scale = FALSE))

关于r - Demean R 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900674/

相关文章:

r - 在 R 中迭代以拼写检查单词向量

ddply(plyr)中的R汇总函数以简单的方式

r - 计算两个子组之间的统计检验的 ggplot2/plyr 方法是什么?

r - 从数据帧创建字符串

r - 使用 big.matrix 对象计算欧几里得距离矩阵

r - 在R中使用lm和nls进行正弦曲线拟合

r - 带有内部标签 r 的优化 VennDiagram

r - 如何在每个组内创建滞后变量?

r - Summarise_each 为第一个非 NA 值

java - R 中的 Apache POI