在数据框中,我希望有一个列,其中包含从另一列中提取的数字,该名称仅作为变量提供:
#!/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()?
答案 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"))