使用 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
...
我正在学习使用 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
...