创建一个函数,使用tidyverse将列标准化为最早的值?

时间:2018-07-05 23:07:07

标签: r lapply tidyverse mutate rollapply

我使用的数据帧具有任意数量的变量,并且具有任意长度。我想创建一个函数,以按其最早的值对每一列进行规范化。我是R / tidyverse的新手,并且认为for循环会起作用:

 Col.norm <- function(df){
             for (i in c(2:ncol(df))) {
             select(df,i) %>%
             mutate(df[]/df[[1]])
             }}  

具有日期列和3个变量的代表性df如下所示:

Z <- data.frame(date = seq(as.Date("2018-06-01"), as.Date("2018-06-11"),   "days"), A = c(5:15), B = c(6:16), C= c(7:17))  

在该df上运行上述功能会产生以下错误:

“ mutate_impl(.data,点)中的错误:   评估错误:二进制运算符的非数字参数”

任何帮助将不胜感激-不确定在执行选择步骤后如何循环...我在此上花了很多时间...

1 个答案:

答案 0 :(得分:0)

Col.norm <- function(df) {
  mutate_at(df, -1, funs(. / head(., 1)))
}