我有一个名为test的小数据集,我想对向量cm中定义的列执行一些mutate操作。
安装并加载一些软件包
require(devtools)
devtools::install_github("hadley/dplyr")
require(dplyr)
首先创建测试数据框
test <- data.frame(col1 = c(1,1),
col2=as.character(c(2,2)),
col3=as.character(c(3,3)), stringsAsFactors=F)
然后我们创建cm矢量
cm <- c("col2", "col3")
我现在可以用
选择cm中的列test %>% select(one_of(cm))
但是当我想执行一个操作时,比如说.numeric我得到一个错误。
> test %>% mutate_each(funs(as.numeric), one_of(cm))
Error in one_of(vars, ...) : object 'cm' not found
我可以手动粘贴矢量
test %>% mutate_each(funs(as.numeric), one_of("col2","col3")) %>% str()
'data.frame': 2 obs. of 3 variables:
$ col1: num 1 1
$ col2: num 2 2
$ col3: num 3 3
这是一个错误还是一个功能?我错过了什么吗?其他任何方式吗?
谢谢! 马丁
答案 0 :(得分:3)
您需要安装并加载包lazyeval
,然后才能使用以下选项之一:
require(lazyeval)
require(dplyr)
test %>%
mutate_each_(funs(as.numeric), interp(~one_of(cm), var = as.name(cm))) %>%
str()
或者,更短的版本:
test %>% mutate_each_(funs(as.numeric), cm) %>% str()
在这种情况下,两者都会做同样的事情。