[英]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.