从每个元素dplyr中减去均值

时间:2015-09-21 09:57:23

标签: 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))

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

谢谢!

1 个答案:

答案 0 :(得分:6)

如果我们使用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,可以复制,以便长度相同。

相关问题