我想编写一个函数,根据从SQL表中读取的字符串在数据框中创建新变量。该函数应该使用两个参数df
和str
,并返回df
并附加一个额外的列。 str
将是"a = f(B)"
形式的字符串,其中a
是df
的列,B
是一组df
列,而f
是转换函数。
示例:
df <- data.frame(EventID = c(111,112,113), Day = c(6,8,15))
我想要的是transform(df, Week = ceiling(Day / 7))
,但我无法弄清楚如何将字符串"Week = ceiling(Day / 7)"
(作为字符类型的变量)传递给{{1}的...
参数}}
我尝试了transform
和parse
的各种组合,但我无法弄清楚如何将字符对象更改为R文档描述为“标记的矢量表达式”。< / p>
答案 0 :(得分:2)
这是一种方式:
fun <- function(df, str.expression) within(df, eval(parse(text=str.expression)))
fun(df, "Week = ceiling(Day / 7)")
# EventID Day Week
# 1 111 6 1
# 2 112 8 2
# 3 113 15 3
答案 1 :(得分:0)
快速计算出来,但我仍然会分享:eval(parse())
整个事情!
eval(parse(text = paste("transform(df,", str, ")", sep = "")))
那就是说,我更喜欢@ flodel的答案。