从每个元素 dplyr 中减去平均值

subtract mean from every element dplyr

我想使用 dplyr 贬低我所有的专栏。我尝试使用 "do()" 命令但失败了。

我基本上想使用更简单的 dplyr 命令复制以下内容:

tickers <- c(rep(1,10),rep(2,10))
df <- data.frame(cbind(tickers,rep(1:20),rep(2:21)))
colnames(df) <- c("tickers","col1","col2")
df %>%  group_by(tickers)
apply(df[,2:3],2,function(x) x - mean(x))

我相信使用 dplyr 可以做得更好。

谢谢!

如果我们使用 dplyr,我们可以使用 mutate_each 并使用 ?select 中提到的任何方法来匹配列。在这里,我使用 matches 可以将正则表达式作为模式。

library(dplyr)
df %>%
    mutate_each(funs(.-mean(.)), matches('^col')) %>%
    select(-tickers)

但这也可以使用 base R:

df[2:3]-colMeans(df[2:3])[col(df[2:3])]

colMeans 输出是一个 vector 可以复制,因此长度将相同。