我有一个问题:如何在不用手写每列的情况下对每列使用transmute
?即有类似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])
}
非常感谢
答案 0 :(得分:3)
现在有一个public int printTreeInOrder(Node node, int k){
//in-order printing (sorted)
if (k>0 && !(isNull(node))){
k = printTreeInOrder(node.getLeft(),k);
if (k>0) {
System.out.println(node.getValue());
k--;
}
return printTreeInOrder(node.getRight(),k);
}
return k;
}
函数(从dplyr 0.7开始),你可以执行以下操作:
transmute_at()
请注意,这使用了基础R中的df %>%
group_by(tickers) %>%
transmute_at(.vars = vars(starts_with("col")),
.funs = funs(scale(.))) %>%
ungroup
函数,默认情况下会将数字向量转换为z得分。
此外,在scale()
参数中使用vars()
允许您使用dplyr .vars
可用的所有辅助函数,例如select()
},one_of()
等
最后,不要在此处写ends_with()
,因为您在funs(scale(.))
参数中使用了一个简单函数,您只需编写.funs
。
答案 1 :(得分:0)
我使用以下方法解决了这个问题:
df %>%
group_by(tickers) %>%
mutate_at(.funs = funs((. - mean(.))/sd(.)),
.cols = vars(matches("col")))