8

我喜欢dplyr数据操作,但我不明白如何使用它进行编程。例如,要重新调整一些变量,我们可以这样做:

mutate(cars, speed.scaled = scale(speed), dist.scaled = scale(dist))

很酷。但是现在假设我想编写一个函数mutate来缩放数据框中的所有变量。如何创建...论点?我能想到的最好的事情是:

fnargs <- lapply(names(cars), function(x){call("scale", as.name(x))})
names(fnargs) <- paste0(names(cars), ".scaled")
do.call(mutate, c(.data=as.name("cars"), fnargs))

或者是否有更编程友好的替代界面?

4

2 回答 2

4

简单易懂:使用mutate_each(cars, funs(scale))apply(cars, 2, scale)

于 2014-07-11T20:39:12.757 回答
1

这可以像这样在基础 R 中完成:

cars.scaled <- as.data.frame(scale(cars))

或者

cars.scaled <- replace(cars, TRUE, lapply(cars, scale))

或者

cars.scaled <- cars
cars.scaled[] <- lapply(cars, scale)

上面的第一个可以翻译成%>%这样使用:

cars.scaled <- cars %>% scale %>% as.data.frame
于 2014-07-11T21:38:10.190 回答