从每个元素dplyr中减去均值

Nic*_*ick 3 r scale 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))
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

akr*_*run 7

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

library(dplyr)
df %>%
    mutate_each(funs(.-mean(.)), matches('^col')) %>%
    select(-tickers)
Run Code Online (Sandbox Code Playgroud)

但这也可以使用base R:

df[2:3]-colMeans(df[2:3])[col(df[2:3])]
Run Code Online (Sandbox Code Playgroud)

colMeans输出是一个vector可以被复制,以使长度将是相同的.