使用 R dplyr 抛出错误

Using R dplyr throws error

我正在学习使用 dplyr pkg。

library(dplyr)

玩具数据集:

d <- expand.grid("id"=1:3,"x1"=10:12,"x2"=(20:22))

稍后我可能需要遍历列,我的真实数据有 30K 行,70 列

i <- 2

这里我希望使用一个通用的变量名

my.variable <- names(d[i])
my.variable

将每个组归一化到 0-1 范围的函数

norm <- function(x) (x - min(x,na.rm = TRUE))/(max(x,na.rm = TRUE)-min(x,na.rm = TRUE))

df.out <- d %>% group_by(id) %>% mutate(x.norm = norm(get(my.variable, envir = as.environment(d))))

抛出错误:

Error: incompatible size (%d), expecting %d (the group size) or 1

对于错误原因的任何帮助表示赞赏。另外,这是执行此规范化任务的可行方法吗?

问题出在 get 的使用上,我确定这违反了@hadley 许可协议 ;)

要评估字符参数,您可以使用 mutate_each_q。但是,当使用单个函数时,它会覆盖变量,所以你必须使用两个函数,然后删除第二个变量:

d %>% group_by(id) %>% mutate_each_q(funs(x.norm=norm, identity),my.variable) %>%
      select(-identity)
Source: local data frame [6 x 4]
Groups: id

  id x1 x2 x.norm
1  1 10 20    0.0
2  2 10 20    0.0
3  3 10 20    0.0
4  1 11 20    0.5
5  2 11 20    0.5
6  3 11 20    0.5
...

不知道您是否真的想要@James 回答中的列。据我了解你的问题:

d %>% group_by(id) %>% mutate_each(funs(norm(.)))

Groups: id

   id  x1  x2
1   1 0.0 0.0
2   2 0.0 0.0
3   3 0.0 0.0

...