R-使用从其他列计算的值创建新的.csv列

R-使用从其他列计算的值创建新的.csv列,r,csv,R,Csv,我有一列值(CO2.Value..PPM),并希望创建一个新列(CO2_new),它是从第一列中获取每个值并按比例缩放的结果。以下是我所尝试的: c$co2_new = 0.0 for (i in c$co2_new){ i = i + ((c$CO2.Value..PPM.-(-24.395))/1.074) return i } head(c$co2_new) 但它返回一个错误(意外符号),列仍然只包含0。我觉得这很简单,但我还没能做到 您的代码中有一些东西要么是错误的,要么是不好

我有一列值(CO2.Value..PPM),并希望创建一个新列(CO2_new),它是从第一列中获取每个值并按比例缩放的结果。以下是我所尝试的:

c$co2_new = 0.0
for (i in c$co2_new){
  i = i + ((c$CO2.Value..PPM.-(-24.395))/1.074)
  return i
}
head(c$co2_new)

但它返回一个错误(意外符号),列仍然只包含0。我觉得这很简单,但我还没能做到

您的代码中有一些东西要么是错误的,要么是不好的

  • 虽然没有被禁止,但使用
    c
    作为变量名通常是不好的形式;虽然R可以理解变量
    c
    和基函数
    c
    (用于连接)之间的区别,但在读取代码时,它显然会混淆

    事实上,有许多人不喜欢单字母变量作为重要变量(有些人说是任何变量);也许在小循环中使用
    i
    是可以接受的,但即使这样,也有人不同意

    其基本原理主要基于代码的共享和维护。如果你在几个月或一年内观察事物,你会非常清楚你的
    c
    中有什么,它在语义上意味着什么,等等吗

  • 不要在
    for
    循环中使用
    return
    ,除非它在一个函数中,并且您打算中断
    for
    循环和函数。具体来说,您在
    for
    循环中的预期操作是从
    $CO2.value..PPM中的一个特定位置获取值,缩放它,然后将该值分配到
    $CO2\u new
    中的相同位置。在这种情况下,您的
    for
    循环变量实际上应该是向量中的索引,而不是值本身,以便您可以引用两个向量中的位置。也许(根据我下面的数字3,这不是一个好代码):

  • 正如@Molx所说,不需要循环,在R中编程时,学习和理解循环是一件非常重要的事情。作业可以一次性完成,因为当你对向量进行数学运算时,向量中的每个值都会进行相同的计算。因此,上述
    for
    循环可以替换为:

    c$co2_new = 0.0
    c$co2_new = c$co2_new + ((c$CO2.Value..PPM. - (-24.395))/1.074)
    
  • 可能是示例的产物,但不需要初始化新列。您可以将此代码进一步简化为:

    ## no need for c$co2_new = 0.0
    c$co2_new = (c$CO2.Value..PPM. - (-24.395))/1.074
    

  • 你的代码肯定不起作用。您不会返回内部for循环,如果您愿意,它将是
    return()
    。另外,您正在更改循环的计数器值,并希望它能神奇地替换新列中的值。试试这个:
    c$co2\u new我建议您阅读一些介绍R的材料,以便更好地理解R的语法。
    
    ## no need for c$co2_new = 0.0
    c$co2_new = (c$CO2.Value..PPM. - (-24.395))/1.074