R 将列名从mutate_传递给函数

R 将列名从mutate_传递给函数,r,dplyr,R,Dplyr,我希望通过dplyr::mutate_each对所有列应用转换,例如 我建议采取不同的方法。不是使用mutate\u,而是将dplyr::mutate与tidyr::gather和tidyr::spread组合使用,可以获得相同的结果 例如: library(dplyr) library(tidyr) data(mtcars) # Multiple each column by a different interger mtcars %>% dplyr::tbl_df() %&g

我希望通过dplyr::mutate_each对所有列应用转换,例如


我建议采取不同的方法。不是使用
mutate\u,而是将
dplyr::mutate
tidyr::gather
tidyr::spread
组合使用,可以获得相同的结果

例如:

library(dplyr)
library(tidyr)

data(mtcars)

# Multiple each column by a different interger
mtcars %>% 
  dplyr::tbl_df() %>%
  dplyr::mutate(make_and_model = rownames(mtcars)) %>%
  tidyr::gather(key, value, -make_and_model) %>% 
  dplyr::mutate(m = as.integer(factor(key)),   # a multiplication factor dependent on column name
                value = value * m) %>% 
  dplyr::select(-m) %>%
  tidyr::spread(key, value)

# compare to the original data
mtcars[order(rownames(mtcars)), order(names(mtcars))]

# the muliplicative values used.
mtcars %>% 
  tidyr::gather() %>% 
  dplyr::mutate(m = as.integer(factor(key))) %>% 
  dplyr::select(-value) %>%
  dplyr::distinct()
named.mult <- function(x,colname) return(x*param.A[[colname]])
param.A <- c()
param.A[names(mtcars)] <- seq(length(names(mtcars)))
param.A
# mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
#   1    2    3    4    5    6    7    8    9   10   11 
library(lazyeval)
named.mutate <- function(fun, cols) sapply(cols, function(n) interp(~fun(col, n), fun=fun, col=as.name(n)))
mtcars %>% mutate_(.dots=named.mutate(named.mult, names(.)))
mtcars %>% mutate_each(funs(named.mult(.,.name)))
library(dplyr)
library(tidyr)

data(mtcars)

# Multiple each column by a different interger
mtcars %>% 
  dplyr::tbl_df() %>%
  dplyr::mutate(make_and_model = rownames(mtcars)) %>%
  tidyr::gather(key, value, -make_and_model) %>% 
  dplyr::mutate(m = as.integer(factor(key)),   # a multiplication factor dependent on column name
                value = value * m) %>% 
  dplyr::select(-m) %>%
  tidyr::spread(key, value)

# compare to the original data
mtcars[order(rownames(mtcars)), order(names(mtcars))]

# the muliplicative values used.
mtcars %>% 
  tidyr::gather() %>% 
  dplyr::mutate(m = as.integer(factor(key))) %>% 
  dplyr::select(-value) %>%
  dplyr::distinct()