使用eval函数更新data.frame列

时间:2014-05-07 03:36:52

标签: r dataframe eval

我在R中有一个带有2列的data.frame df,我需要根据另一列中的值使用eval函数(或通过任何其他方式)更新其中一列。 Col1是一个字符列,我需要评估表达式并在Col2中更新结果。 因此,对于第一行,它将是-0.49,对于最后一行:-0.26。 我尝试了这种方法,但它使用上一行评估结果更新了所有值:

df["Col2"] <- eval(parse(text=df$Col1))


Col1                     Col2
------------------------------
20.31 - 20.80            0
51.81 - 52.22            0
44.07 - 44.88            0
42.94 - 43.47            0
18.93 - 19.15            0
27.42 - 27.68            0

我得到了意想不到的结果:

Col1                     Col2
------------------------------
20.31 - 20.80            -0.26
51.81 - 52.22            -0.26
44.07 - 44.88            -0.26
42.94 - 43.47            -0.26
18.93 - 19.15            -0.26
27.42 - 27.68            -0.26

1 个答案:

答案 0 :(得分:3)

如果你传递eval一个表达式向量,它只会返回最后一个结果。我不确定为什么这是理想的行为,但这就是?eval帮助页面上记录的方式:

  

(函数返回)评估对象的结果:对于表达式向量,这是评估最后一个元素的结果。

因此,您可以通过友好的sapply声明解决此问题。

sapply(df$Col1, function(x) eval(parse(text=x)))

这应该会为您提供您期望的结果向量。