r - mutate_each 中的 one_of(vector) 导致找不到对象

标签 r dplyr

我有一个名为 test 的小数据集,我想在其中对向量 cm 中定义的列执行一些变异操作。

安装和加​​载一些包

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")

我现在可以选择以厘米为单位的列

test %>% select(one_of(cm))

但是当我想执行一个操作时,比如 as.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

这是错误还是功能?我错过了什么吗?还有其他方法吗?

谢谢! 马丁

最佳答案

您需要安装并加载包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()

在这种情况下两者都会做同样的事情。

关于r - mutate_each 中的 one_of(vector) 导致找不到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061792/

相关文章:

r - 可用于 R 中任何存储的 Manipulate 函数

在不使用 list() 的情况下,在 dplyr 中将 NA 替换为零

r - show()、hide() 使用来自 Shinyjs、Shiny

r - 在 R 中声明变量

R -Markdown for { } 大括号

R dplyr 用第一个非 "missing"值替换 -"missing"列数据

r - 您可以使用 dplyr cross() 来遍历成对的列吗?

r - 查找哪些点在每个点的给定距离内

r - 使用 Windows 的 R 中的文件路径问题 ("Hex digits in character string"错误)

r - dplyr:值的分组减法(基于预过滤的行)