繁体   English   中英

使用eval函数更新data.frame列

[英]Updating a data.frame column with eval function

我在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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM