如何在dplyr中使用标准求值来嵌套函数

时间:2017-11-16 11:55:04

标签: r dplyr

在数据框中,我希望有一个列,其中包含从另一列中提取的数字,该名称仅作为变量提供:

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female', 'Age': 17 }

dict.update(dict2)

但它确定了NA'新列中的值:

> name <- 'x'
> df <- data.frame(x = '01abc78')
> mutate_(df, number = as.numeric(substr(name, 6, 7)))

非常奇怪

        x number
1 01abc78     NA

抛出错误:

> mutate_(df, number = substr(name, 6, 7))

只有

Error in parse(text = x)[[1]] : subscript out of bounds

有效,但做了不同的事情。 get()也没有解决方案:

> mutate_(df, number = name)

我当然能做到

> mutate(df, number = as.numeric(substr(get(name), 6, 7)))
Error: object 'x' not found

但它肯定不漂亮。

如何解决这个问题,只使用mutate_或get()?

2 个答案:

答案 0 :(得分:1)

我们可以使用rlang::sym将其转换为symbol,然后使用!!对其进行评估

df %>%
   mutate(number = substr(!! rlang::sym(name), 6, 7))
#        x number
#1 01abc78     78

答案 1 :(得分:0)

使用粘贴可以帮助

dots = paste0("as.numeric(substr(",name,", 6, 7) )")
mutate_(df, .dots = setNames(dots,"number"))