gpt4 book ai didi

r - 在 dplyr 中转换多列

转载 作者:行者123 更新时间:2023-12-04 15:32:56 26 4
gpt4 key购买 nike

我有一个 dplyr 问题:我如何使用 transmute在每一列上而不用手写出每一列? IE。有没有类似 transmute_each() 的东西?

我想执行以下操作:使用 dplyr 我想获得下面 MWE 每一列的 z 分数:

tickers <- c(rep(1,10),rep(2,10))
df <- data.frame(cbind(tickers,rep(1:20),rep(2:21),rep(2:21),rep(4:23),rep(3:22)))
colnames(df) <- c("tickers","col1","col2","col3","col4","col5")
df %>% group_by(tickers)

有没有一种简单的方法可以使用 transmute 来实现以下目标:
for(i in 2:ncol(df)){
df[,i] <- df[,i] - mean(df[,i])/sd(df[,i])
}

非常感谢

最佳答案

现在有一个 transmute_at()函数(从 dplyr 0.7 开始),您可以执行以下操作:

df %>% 
group_by(tickers) %>%
transmute_at(.vars = vars(starts_with("col")),
.funs = funs(scale(.))) %>%
ungroup

请注意,这使用了 scale()来自基数 R 的函数,默认情况下将数字向量转换为 z 分数。

还有,使用 vars().vars参数允许您使用可用于 dplyr select() 的所有辅助函数。 ,例如 one_of() , ends_with() , 等等。

最后,而不是写 funs(scale(.))在这里,因为您在 .funs 中使用了一个简单的函数争论,你可以写 .funs = scale .

关于r - 在 dplyr 中转换多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32738641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com