从每个元素 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
可以复制,因此长度将相同。
我想使用 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
可以复制,因此长度将相同。